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

Поділитися
Вставка
  • Опубліковано 11 гру 2024

КОМЕНТАРІ • 54

  • @MrVIPKent
    @MrVIPKent 2 роки тому +1

    Є бажання відео про DI. Макс не зупиняйся! Ти кращий!

    • @grommaks
      @grommaks  2 роки тому +2

      По DI є два плейліста) може буде ще

    • @MrVIPKent
      @MrVIPKent 2 роки тому +1

      @@grommaks Макс головне не зупиняйся!

  • @grommaks
    @grommaks  4 роки тому +7

    Приветствую друзья!
    Зацените как я разбил полосу прокрутки. UA-cam делает интерфейс удобным! ✌️
    Это видео далось мне трудно, по этой причине на этой неделе будет только одно видео, зато аж на 40 минут по очень важной теме :)
    Я не тратил времени на просьбу поставить лайк и подписаться, по этому оставлю это в комментариях 🐶
    Пиши, что еще ты хотел бы видеть у меня на канале?
    Хорошего настроения тебе мой друг 😎😸✌️

  • @photoskins6503
    @photoskins6503 Рік тому +2

    Це шедевр! Де ти був раніше?

    • @grommaks
      @grommaks  Рік тому

      Дякую за відгук

  • @VictorKorovin-s9q
    @VictorKorovin-s9q 9 місяців тому +2

    Классное объяснение, спасибо. Поставил лайк, хотя пришлось плюсонуть знакомую цифру - 404 )

  • @johnd1431
    @johnd1431 11 місяців тому +2

    Отличнейшее видео, огромное спасибо

  • @Sergei546
    @Sergei546 4 роки тому +3

    Очень полезный урок! Спасибо! Насчёт React, аналога pipe там тоже не наблюдал, заменяю просто самописной функцией, которая что-либо делает с данными, приходящими в props в момент отрисовки компоненты

    • @grommaks
      @grommaks  4 роки тому +2

      Часто делают компонент который является пайпой. Но в этом случае не понйтно как в аттрибутах использовать что-то подобное :)
      По этому функция это идеальное решение для реакт ;)

  • @viss23
    @viss23 4 роки тому +4

    Спасибо за видео, мне повезло что я на него наткнулся.

    • @grommaks
      @grommaks  4 роки тому +1

      Рад что мое видео помогло Вам :)

  • @sergeisychov9810
    @sergeisychov9810 2 роки тому +1

    Спасибо. Крутое видео. Осталось где-то найти работу, чтобы набить руку по этим принципам)))))))

  • @IngvarLosev
    @IngvarLosev 3 роки тому +3

    Спасибо, по больше таких уроков.

  • @bukanaka
    @bukanaka 3 роки тому +2

    Информация очень топовая, растём до мидла)

  • @Сайхан-н4б
    @Сайхан-н4б Рік тому +1

    спасибо

  • @user-san-chous
    @user-san-chous Рік тому +2

    Интересный факт (из книги "Чистая архитектура", которую начал читать). Single Responsibility в SOLID на самом деле значит не то, что одна структура - одна задача (т.е. что каждый кусок кода должен делать что-то одно, как пишут). На самом деле это другой принцип, который тоже существует, но не входит в SOLID.
    А здесь же Single Responsibility означает, что модуль должен отвечать только за одного пользователя (ну или группу, разумеется, автор называет это actor) и в итоге иметь только одну причину для изменений. И по словам автора, этот принцип из всех самый сложный для понимания. Там есть хорошие примеры того, что имеется в виду, но здесь их расписывать долго.
    Хотя будучи 2 года в разработке (коммерческой), множество раз слышал именно этот вариант) в т.ч. от других известных блогеров. Но эту путаницу можно отследить, как она появлялась в разных источниках, включая украинскую и русскую Википедии, где в одну кучу намешали два этих принципа. А вот в английской википедии не заморачивались, а просто взяли выдержки из книги)) И можно даже найти разъяснение Роберта Мартина. Все-таки он придумал этот принцип)

    • @grommaks
      @grommaks  Рік тому

      Single responsibility относится ко всему :)
      Метод, класс, модуль, библиотека, приложение, сервис(микросервис)
      Мой главный посыл, что юнит должен отвечать за одну зону ответственности (тут уже нужно решать внутри команды что это значит, везде по разному), и за одну зону ответственности отвечает один юнит
      Например мне нужно сгенерировать дату в приложении, должен быть один путь сделать это и только один, этот юнит можно расширить по необходимости, но он останется одним юнитом

    • @user-san-chous
      @user-san-chous Рік тому +1

      @@grommaks да, я понимаю) и понимаю важность. Но в то же время это, кажется, вполне понятным (а в книге принцип описан, как самый сложный для понимания). Я говорю чисто только о теории, что вкладывает на данный момент автор этого принципа в его понятие в составе SOLID. Просто, как интересный факт. Ведь в книге он так прямо говорит, что не это имел в виду и что само название, видимо, вводит в заблуждение большинство разработчиков.
      На самом деле первый и второй вариант очень похожи. Но все-таки это не одно и то же. И в оригинале в этот принцип автор (он же автор книги) вложил немного иную суть.
      Это все есть в первых двух абзацах раздела "Принцип единственной ответственности". Хотя если гуглить, то все наводят именно первый вариант трактовки)

    • @grommaks
      @grommaks  Рік тому

      @@user-san-chous многое из того что придумали в оригинале трактуется по другому :) как песни могут вызывать разные эмоции
      Автор писал свои принципы десятки лет назад, стоит прислушиваться к мнению авторов (Мартина или меня) но надо анализировать контекст своего приложения
      P.S. Спасибо за дополнение, надеюсь скоро доберусь до этой инфы, заинтересовался что же там такого написано :)

  • @НиколайВладимирович-к5ф

    Спасибо за видео! 40:02 Есть желание послушать про DI в Angulare

    • @grommaks
      @grommaks  4 роки тому +3

      Обязательно) nestjs использует angular di framework. Спасибо за отзыв) это меня мотивирует

    • @grommaks
      @grommaks  3 роки тому +1

      Забыл сюда прикрепить ссылку, думаю будет полезно новеньким которые увидят запрос тут
      ua-cam.com/video/2XzVwsV3HtQ/v-deo.html
      Надеюсь смогу снять вторую версию ближайшим временем

  • @yuriiyurii6656
    @yuriiyurii6656 2 роки тому +1

    Amazing

  • @markostr
    @markostr 2 роки тому +1

    Спосибо !

  • @Kulibins1
    @Kulibins1 4 роки тому +6

    Почему так мало подписчиков? Материалы автора хороши.

    • @grommaks
      @grommaks  4 роки тому +2

      Растем по немногу)
      Ваши коментарии помогают ютубу продвигать мои видео) а мне получать удовольствие от разработки уроков и расти по качеству контента ;)
      Спасибо за отзыв)

    • @grommaks
      @grommaks  3 роки тому +1

      Ух какое качество звука у меня год назад было) явно видео требует того, чтобы я его переснял)

    • @bukanaka
      @bukanaka 3 роки тому +1

      @@grommaks Эт я как раз попал сюда

  • @Re_p1ay
    @Re_p1ay 3 роки тому +2

    Зашёл просто чтобы посмотреть рекламу
    Всем добра....и денег 😁

    • @grommaks
      @grommaks  3 роки тому

      Спасибо 😅

  • @user-san-chous
    @user-san-chous 3 роки тому +2

    Спасибо тебе большое.
    Тебе надо бы запилить курс для новичков по Ангуляру. И подписчиков станет много, либо на Юдеми можно выложить - спрос будет большой, так как в рунете среди Аналогов только Минин, а он не лучший эксперт...
    Ну и микрофон бы поменять на более качественный))

    • @grommaks
      @grommaks  3 роки тому +2

      С микрофоном решил проблему) по поводу курса думаю скоро начну над ним работу

  • @romanryaboshtan9270
    @romanryaboshtan9270 3 роки тому +1

    40:15 Хотелось бы про DI в обычном JS

    • @grommaks
      @grommaks  3 роки тому +2

      Трах тиби дох: ua-cam.com/video/FF_eyaCrZD8/v-deo.html
      Приятного просмотра)

  • @FerelUltra
    @FerelUltra 2 роки тому +1

    23:40.
    Как это наследование антипаттерн? И как это не один из китов Ооп? Непонятно.

    • @grommaks
      @grommaks  2 роки тому +1

      Как это обычно бывает, сначала все фреймворки строились на базе наследования, теперь на базе Dependency Injection. Благодаря DI используют композицию вместо наследования, так как композиция дает больше гибкости и безопасности при доработки, то наследование искореняют со всех мест где это возможно сделать.
      Декораторы в Angular тому пример, зачем наследоваться от базового компонента если можно использовать декоратор.
      Реакт классовые компоненты уходят в пролшлое благодаря хукам (совершенно другой подход к решению той же самой проблемы)
      Во вью за счет миксинов решается вопрос расширения компонентов
      В PHP во многих решениях уходят от наследования, как в библиотеках так и во фреймворках
      Если кратко, если сказать что наследование это второе поколение создания расширяемого кода, то композиция это третье поколение.
      Естественно дальше может все поменяться, но сегодня такая ситуация

    • @FerelUltra
      @FerelUltra 2 роки тому +2

      @@grommaks круто разъяснил.
      что тогда первое поколение расширяемого кода?

    • @grommaks
      @grommaks  2 роки тому +2

      @@FerelUltra код в стиле СИ это первое поколение. Функции, процедуры и структуры данных
      В таком стиле написан линукс
      В таком стиле написан WordPress
      Еще можно отнести код где функции раскиданы по объектам, как правило как статические методы только используются, такие приложения любили называть как ООП приложения :) но на самом деле это все то же старое процедурное программирование, но с неймспейсами в виде объектов

    • @FerelUltra
      @FerelUltra 2 роки тому +2

      @@grommaks примерно понял, спасибо!

  • @roman_freedom
    @roman_freedom 4 роки тому +1

    Спасибо за видео!
    Сделай пожалуйста видео о Change detection and NgZone

    • @grommaks
      @grommaks  3 роки тому +3

      Сделал не так давно видео об Render в Angular. Если еще актуально то вот ua-cam.com/video/b7AIQQ8upII/v-deo.html , а так может пригодится новым зрителям)

    • @roman_freedom
      @roman_freedom 3 роки тому +2

      @@grommaks большое спасибо! Это всегда актуально

  • @dimon.digital
    @dimon.digital Рік тому +1

    Понимаю что от наследования нужно избавляться, но как реализовать шаблон Абстрактный Класс без наследования, класс который относится как один у многих?!

    • @grommaks
      @grommaks  Рік тому

      Через наследование, в JS через декораторы или наследование или миксины.
      Больше вопрос, а нужен ли этот паттерн? Я знаю лишь один случай его оправданного применения, это в SPI, но даже там сейчас делают не через наследование, а через помещении логики абстрактного класса в ядро, и через интерфейсы происходит переопределение этой логики . По типу если нет метода ngOnDestroy то вызови стандартный метод или вовсе не вызывай ничего

    • @dimon.digital
      @dimon.digital Рік тому +1

      @@grommaks спасибо. Я имею ввиду стандартную базовую реализацию через extends TypeScript. Чтобы полностью избавиться от наследования нужно будет выпилить часть стандарта EcmaScript))
      То есть от наследования в целом уже не избавиться полностью никогда, в контексте Angular и TypeScript

    • @grommaks
      @grommaks  Рік тому +1

      @@dimon.digital я не говорю что наследование не должно быть, наследование нужно использовать в тех местах где это нужно
      P.S. прошлое поколение приложений было построено исключительно на огромном количестве наследований. По этому с ними до сих пор боятся говоря что наследование это зло
      P.S.S. наследование зло как основа фреймворка, но не как явление в целом :) Но ни в реакт ни в ангулар проектах, даже в большинстве PHP проектах мне не приходилось использовать наследование для решения задач за последние 2-3 года работы, кроме явно жирных мест которые невозможно было быстро перевести на новый подход. 5-6 лет назад все было построено исключительно на наследовании...к примеру jQuery widgets, Magento 1

  • @ilnurryazhapov
    @ilnurryazhapov 4 роки тому +1

    вообще супер пупер круто только микрофон нужно получше

    • @grommaks
      @grommaks  4 роки тому

      1) слегка слышно дыхание (думаю на петличку смогу писать более качественно)
      2) есть небольшой шум (думаю дополнительная обработка звука поможет)
      3) с громкостью все нормально
      Правильно все понял? :) мои уроки Git вообще с печальной гарнитурой :) переписывать нужно будет весь курс :)

  • @miraclechina1301
    @miraclechina1301 4 роки тому +1

    Не понял нащёт принципа лисков как мне тогда передать значение какое то в класс если я должен использовать только родителя и его переменные, с принципами ООП не вяжется...

    • @grommaks
      @grommaks  4 роки тому +2

      1) очередность параметров должна быть такой же
      2) типы данных по параметрам должны быть теми же
      3) новые параметры должны быть не обязательными
      4) если меняете свой класс (супер класс) то нельзя добавлять обязательноые параметры (если есть шанс что класс был унаследован)
      Все это справедливо если мы говорим о подмене суперкласса подклассом.
      Представьте что код, который использует подкласс думает что он работает с суперклассом...и нужно сделать так, чтобы ничего не сломать

    • @grommaks
      @grommaks  4 роки тому

      Если пришлете ссылку на гист, с конкретным примером где не понятно как правильно сделать, то смогу ответить ;)

    • @miraclechina1301
      @miraclechina1301 4 роки тому +1

      @@grommaks , спасибо Максим, но пока не могу, спасибо за вашу роботу но буду сам грести)

  • @artjomsfomenko757
    @artjomsfomenko757 2 роки тому

    ставим лайк кто узнал C# конвертер