SOLID принципы js. Объяснение принципов на примере framework Angular. solid design principles

  Рет қаралды 7,508

Максим Гром

Максим Гром

Күн бұрын

Пікірлер: 56
@grommaks
@grommaks 4 жыл бұрын
Приветствую друзья! Зацените как я разбил полосу прокрутки. KZbin делает интерфейс удобным! ✌️ Это видео далось мне трудно, по этой причине на этой неделе будет только одно видео, зато аж на 40 минут по очень важной теме :) Я не тратил времени на просьбу поставить лайк и подписаться, по этому оставлю это в комментариях 🐶 Пиши, что еще ты хотел бы видеть у меня на канале? Хорошего настроения тебе мой друг 😎😸✌️
@Sergei546
@Sergei546 4 жыл бұрын
Очень полезный урок! Спасибо! Насчёт React, аналога pipe там тоже не наблюдал, заменяю просто самописной функцией, которая что-либо делает с данными, приходящими в props в момент отрисовки компоненты
@grommaks
@grommaks 4 жыл бұрын
Часто делают компонент который является пайпой. Но в этом случае не понйтно как в аттрибутах использовать что-то подобное :) По этому функция это идеальное решение для реакт ;)
@IngvarLosev
@IngvarLosev 2 жыл бұрын
Спасибо, по больше таких уроков.
@VictorKorovin-s9q
@VictorKorovin-s9q 7 ай бұрын
Классное объяснение, спасибо. Поставил лайк, хотя пришлось плюсонуть знакомую цифру - 404 )
@johnd1431
@johnd1431 9 ай бұрын
Отличнейшее видео, огромное спасибо
@viss23
@viss23 4 жыл бұрын
Спасибо за видео, мне повезло что я на него наткнулся.
@grommaks
@grommaks 4 жыл бұрын
Рад что мое видео помогло Вам :)
@user-san-chous
@user-san-chous Жыл бұрын
Интересный факт (из книги "Чистая архитектура", которую начал читать). Single Responsibility в SOLID на самом деле значит не то, что одна структура - одна задача (т.е. что каждый кусок кода должен делать что-то одно, как пишут). На самом деле это другой принцип, который тоже существует, но не входит в SOLID. А здесь же Single Responsibility означает, что модуль должен отвечать только за одного пользователя (ну или группу, разумеется, автор называет это actor) и в итоге иметь только одну причину для изменений. И по словам автора, этот принцип из всех самый сложный для понимания. Там есть хорошие примеры того, что имеется в виду, но здесь их расписывать долго. Хотя будучи 2 года в разработке (коммерческой), множество раз слышал именно этот вариант) в т.ч. от других известных блогеров. Но эту путаницу можно отследить, как она появлялась в разных источниках, включая украинскую и русскую Википедии, где в одну кучу намешали два этих принципа. А вот в английской википедии не заморачивались, а просто взяли выдержки из книги)) И можно даже найти разъяснение Роберта Мартина. Все-таки он придумал этот принцип)
@grommaks
@grommaks Жыл бұрын
Single responsibility относится ко всему :) Метод, класс, модуль, библиотека, приложение, сервис(микросервис) Мой главный посыл, что юнит должен отвечать за одну зону ответственности (тут уже нужно решать внутри команды что это значит, везде по разному), и за одну зону ответственности отвечает один юнит Например мне нужно сгенерировать дату в приложении, должен быть один путь сделать это и только один, этот юнит можно расширить по необходимости, но он останется одним юнитом
@user-san-chous
@user-san-chous Жыл бұрын
@@grommaks да, я понимаю) и понимаю важность. Но в то же время это, кажется, вполне понятным (а в книге принцип описан, как самый сложный для понимания). Я говорю чисто только о теории, что вкладывает на данный момент автор этого принципа в его понятие в составе SOLID. Просто, как интересный факт. Ведь в книге он так прямо говорит, что не это имел в виду и что само название, видимо, вводит в заблуждение большинство разработчиков. На самом деле первый и второй вариант очень похожи. Но все-таки это не одно и то же. И в оригинале в этот принцип автор (он же автор книги) вложил немного иную суть. Это все есть в первых двух абзацах раздела "Принцип единственной ответственности". Хотя если гуглить, то все наводят именно первый вариант трактовки)
@grommaks
@grommaks Жыл бұрын
@@user-san-chous многое из того что придумали в оригинале трактуется по другому :) как песни могут вызывать разные эмоции Автор писал свои принципы десятки лет назад, стоит прислушиваться к мнению авторов (Мартина или меня) но надо анализировать контекст своего приложения P.S. Спасибо за дополнение, надеюсь скоро доберусь до этой инфы, заинтересовался что же там такого написано :)
@photoskins6503
@photoskins6503 Жыл бұрын
Це шедевр! Де ти був раніше?
@grommaks
@grommaks Жыл бұрын
Дякую за відгук
@Re_p1ay
@Re_p1ay 3 жыл бұрын
Зашёл просто чтобы посмотреть рекламу Всем добра....и денег 😁
@grommaks
@grommaks 3 жыл бұрын
Спасибо 😅
@bukanaka
@bukanaka 2 жыл бұрын
Информация очень топовая, растём до мидла)
@НиколайВладимирович-к5ф
@НиколайВладимирович-к5ф 4 жыл бұрын
Спасибо за видео! 40:02 Есть желание послушать про DI в Angulare
@grommaks
@grommaks 4 жыл бұрын
Обязательно) nestjs использует angular di framework. Спасибо за отзыв) это меня мотивирует
@grommaks
@grommaks 2 жыл бұрын
Забыл сюда прикрепить ссылку, думаю будет полезно новеньким которые увидят запрос тут kzbin.info/www/bejne/aIndh6qpi5h7qrM Надеюсь смогу снять вторую версию ближайшим временем
@sergeisychov9810
@sergeisychov9810 2 жыл бұрын
Спасибо. Крутое видео. Осталось где-то найти работу, чтобы набить руку по этим принципам)))))))
@Сайхан-н4б
@Сайхан-н4б Жыл бұрын
спасибо
@Kulibins1
@Kulibins1 4 жыл бұрын
Почему так мало подписчиков? Материалы автора хороши.
@grommaks
@grommaks 4 жыл бұрын
Растем по немногу) Ваши коментарии помогают ютубу продвигать мои видео) а мне получать удовольствие от разработки уроков и расти по качеству контента ;) Спасибо за отзыв)
@grommaks
@grommaks 2 жыл бұрын
Ух какое качество звука у меня год назад было) явно видео требует того, чтобы я его переснял)
@bukanaka
@bukanaka 2 жыл бұрын
@@grommaks Эт я как раз попал сюда
@MrVIPKent
@MrVIPKent Жыл бұрын
Є бажання відео про DI. Макс не зупиняйся! Ти кращий!
@grommaks
@grommaks Жыл бұрын
По DI є два плейліста) може буде ще
@MrVIPKent
@MrVIPKent Жыл бұрын
@@grommaks Макс головне не зупиняйся!
@roman_freedom
@roman_freedom 4 жыл бұрын
Спасибо за видео! Сделай пожалуйста видео о Change detection and NgZone
@grommaks
@grommaks 2 жыл бұрын
Сделал не так давно видео об Render в Angular. Если еще актуально то вот kzbin.info/www/bejne/mGikeoSHbdqjf6s , а так может пригодится новым зрителям)
@roman_freedom
@roman_freedom 2 жыл бұрын
@@grommaks большое спасибо! Это всегда актуально
@user-san-chous
@user-san-chous 3 жыл бұрын
Спасибо тебе большое. Тебе надо бы запилить курс для новичков по Ангуляру. И подписчиков станет много, либо на Юдеми можно выложить - спрос будет большой, так как в рунете среди Аналогов только Минин, а он не лучший эксперт... Ну и микрофон бы поменять на более качественный))
@grommaks
@grommaks 3 жыл бұрын
С микрофоном решил проблему) по поводу курса думаю скоро начну над ним работу
@markostr
@markostr 2 жыл бұрын
Спосибо !
@yuriiyurii6656
@yuriiyurii6656 2 жыл бұрын
Amazing
@ilnurryazhapov
@ilnurryazhapov 4 жыл бұрын
вообще супер пупер круто только микрофон нужно получше
@grommaks
@grommaks 4 жыл бұрын
1) слегка слышно дыхание (думаю на петличку смогу писать более качественно) 2) есть небольшой шум (думаю дополнительная обработка звука поможет) 3) с громкостью все нормально Правильно все понял? :) мои уроки Git вообще с печальной гарнитурой :) переписывать нужно будет весь курс :)
@romanryaboshtan9270
@romanryaboshtan9270 2 жыл бұрын
40:15 Хотелось бы про DI в обычном JS
@grommaks
@grommaks 2 жыл бұрын
Трах тиби дох: kzbin.info/www/bejne/fHfClqyXeNeNepo Приятного просмотра)
@dimon.digital
@dimon.digital Жыл бұрын
Понимаю что от наследования нужно избавляться, но как реализовать шаблон Абстрактный Класс без наследования, класс который относится как один у многих?!
@grommaks
@grommaks Жыл бұрын
Через наследование, в JS через декораторы или наследование или миксины. Больше вопрос, а нужен ли этот паттерн? Я знаю лишь один случай его оправданного применения, это в SPI, но даже там сейчас делают не через наследование, а через помещении логики абстрактного класса в ядро, и через интерфейсы происходит переопределение этой логики . По типу если нет метода ngOnDestroy то вызови стандартный метод или вовсе не вызывай ничего
@dimon.digital
@dimon.digital Жыл бұрын
@@grommaks спасибо. Я имею ввиду стандартную базовую реализацию через extends TypeScript. Чтобы полностью избавиться от наследования нужно будет выпилить часть стандарта EcmaScript)) То есть от наследования в целом уже не избавиться полностью никогда, в контексте Angular и TypeScript
@grommaks
@grommaks Жыл бұрын
@@dimon.digital я не говорю что наследование не должно быть, наследование нужно использовать в тех местах где это нужно P.S. прошлое поколение приложений было построено исключительно на огромном количестве наследований. По этому с ними до сих пор боятся говоря что наследование это зло P.S.S. наследование зло как основа фреймворка, но не как явление в целом :) Но ни в реакт ни в ангулар проектах, даже в большинстве PHP проектах мне не приходилось использовать наследование для решения задач за последние 2-3 года работы, кроме явно жирных мест которые невозможно было быстро перевести на новый подход. 5-6 лет назад все было построено исключительно на наследовании...к примеру jQuery widgets, Magento 1
@miraclechina1301
@miraclechina1301 4 жыл бұрын
Не понял нащёт принципа лисков как мне тогда передать значение какое то в класс если я должен использовать только родителя и его переменные, с принципами ООП не вяжется...
@grommaks
@grommaks 4 жыл бұрын
1) очередность параметров должна быть такой же 2) типы данных по параметрам должны быть теми же 3) новые параметры должны быть не обязательными 4) если меняете свой класс (супер класс) то нельзя добавлять обязательноые параметры (если есть шанс что класс был унаследован) Все это справедливо если мы говорим о подмене суперкласса подклассом. Представьте что код, который использует подкласс думает что он работает с суперклассом...и нужно сделать так, чтобы ничего не сломать
@grommaks
@grommaks 4 жыл бұрын
Если пришлете ссылку на гист, с конкретным примером где не понятно как правильно сделать, то смогу ответить ;)
@miraclechina1301
@miraclechina1301 4 жыл бұрын
@@grommaks , спасибо Максим, но пока не могу, спасибо за вашу роботу но буду сам грести)
@FerelUltra
@FerelUltra 2 жыл бұрын
23:40. Как это наследование антипаттерн? И как это не один из китов Ооп? Непонятно.
@grommaks
@grommaks 2 жыл бұрын
Как это обычно бывает, сначала все фреймворки строились на базе наследования, теперь на базе Dependency Injection. Благодаря DI используют композицию вместо наследования, так как композиция дает больше гибкости и безопасности при доработки, то наследование искореняют со всех мест где это возможно сделать. Декораторы в Angular тому пример, зачем наследоваться от базового компонента если можно использовать декоратор. Реакт классовые компоненты уходят в пролшлое благодаря хукам (совершенно другой подход к решению той же самой проблемы) Во вью за счет миксинов решается вопрос расширения компонентов В PHP во многих решениях уходят от наследования, как в библиотеках так и во фреймворках Если кратко, если сказать что наследование это второе поколение создания расширяемого кода, то композиция это третье поколение. Естественно дальше может все поменяться, но сегодня такая ситуация
@FerelUltra
@FerelUltra 2 жыл бұрын
@@grommaks круто разъяснил. что тогда первое поколение расширяемого кода?
@grommaks
@grommaks 2 жыл бұрын
@@FerelUltra код в стиле СИ это первое поколение. Функции, процедуры и структуры данных В таком стиле написан линукс В таком стиле написан WordPress Еще можно отнести код где функции раскиданы по объектам, как правило как статические методы только используются, такие приложения любили называть как ООП приложения :) но на самом деле это все то же старое процедурное программирование, но с неймспейсами в виде объектов
@FerelUltra
@FerelUltra 2 жыл бұрын
@@grommaks примерно понял, спасибо!
@artjomsfomenko757
@artjomsfomenko757 Жыл бұрын
ставим лайк кто узнал C# конвертер
@rexenpro2747
@rexenpro2747 2 жыл бұрын
не тыкай
@grommaks
@grommaks 2 жыл бұрын
🥲
Миллионер | 1 - серия
34:31
Million Show
Рет қаралды 2,3 МЛН
How To Get Married:   #short
00:22
Jin and Hattie
Рет қаралды 27 МЛН
How Strong is Tin Foil? 💪
00:26
Preston
Рет қаралды 153 МЛН
Angular + NGRX за час
1:02:30
Максим Гром
Рет қаралды 36 М.
SOLID Design Principles in #Angular (Advanced, 2021)
41:49
Decoded Frontend
Рет қаралды 146 М.
Просто о SOLID (Принципы SOLID)
15:54
webDev
Рет қаралды 220 М.
Solid Principles Interview Questions - You Might Get Them
9:44
Monsterlessons Academy
Рет қаралды 7 М.
Миллионер | 1 - серия
34:31
Million Show
Рет қаралды 2,3 МЛН