SOLID принципы / # 2 SRP - Single Responsibility Principle / Принцип единственной ответственности

Sdílet
Vložit
  • čas přidán 3. 08. 2024
  • Подписка на Boosty: boosty.to/engineerspock
    ----------------------------------------------------------------------------------------
    Курсы от EngineerSpock: offer.engineerspock.com/
    Донаты на развитие: pay.cloudtips.ru/p/1f080f72
    SOLID принципы - это большАя часть современной теории ООП (объектно-ориентированного программирования). Впервые сам термин предложил дядя Боб (Uncle Bob), хотя основы для выведения принципов были известны до него и разбирались, например, в известном труде Бертрана Мейера ("Объектно-ориентированное конструирование программных систем").
    SOLID расшифровывается так:
    S - Single Responsibility Principle (SRP) - Принцип единственной ответственности
    O - Open Closed Principle (OCP) - Принцип открытости/закрытости
    L - Liskov Substitution Principles (LSP) - Принцип подстановки Барбары Лисков
    I - Interface Segregation Principle (ISP) - Принцип разделения интерфейса
    D - Dependency Inversion Principle (DIP) - Принцип инверсии зависимости
    Следование принципам SOLID в программировании имеет огромную роль с точки зрения написания чистого кода и как следствие максимизации простоты поддержки кода.
    Во втором выпуске мы поговорим об SRP - Single Responsibility Principle или Принцип единственной ответственности. Обсудим частые запахи нарушения SRP и посмотрим на относительно сложный пример нарушения и на то как провести рефакторинг, исправляющий нарушение принципа.
    00:00 Начало выпуска о SRP
    00:29 Определение SRP из википедии и от Роберта Мартина (aka дядя Боб)
    01:11 Подсчёт обязанностей класса. Уровни применения SRP
    02:40 Нарушение SRP на практике
    05:48 Связанность (coupling) и связность (cohesion)
    07:01 Сложный пример нарушения SRP на C# и Python
    09:58 Рефакторинг примера для устранения нарушения SRP
    14:12 Обсуждение результатов рефакторинга
    14:46 Частые случаи нарушения SRP
    17:50 Заключение по SRP
    Ссылка на репозиторий: github.com/EngineerSpock/yout...
    #solid #srp #ocp #lsp #isp #dip #oop #cleancode
    Курсы релевантные данному видео:
    Архитектура ПО: Meta и SOLID принципы в ООП с примерами на C# bit.ly/2UiuoeY
    Архитектура ПО: внедрение зависимостей на C# bit.ly/368zugi
    Лучшие практики проектирования и реализации API на C# bit.ly/3qICNEr
    Также можно рассмотреть курс "Изучаем юнит-тестирование с NUnit на C#" bit.ly/3dxP9tX

Komentáře • 25

  • @suffocateforfucksake
    @suffocateforfucksake Před 2 lety +2

    Пожалуй, лучшее, что я видел по SRP на ютубе. Тут и правильные определения терминов, и про low coupling и high cohesion, и про оркестровку, и не высосанные из пальца примеры. А еще очень грамотное использование абстракций и скрытая отсылочка к Reused Abstraction Principle.

  • @user-ew2pd6fq8j
    @user-ew2pd6fq8j Před 3 lety +4

    Вижу Донателло :)), моя любимая черепашка, потому что он ученый..., я его обожал в детстве :)
    P.S. Ролики все лучше и лучше, очень доходчиво получилось с банковскими операциями!

  • @MrTemperator
    @MrTemperator Před rokem +1

    Спасибо за видео, классная подача материала с понятными примерами

  • @user-tw6ps2ro7k
    @user-tw6ps2ro7k Před 2 lety +1

    Очень интересно! И прекрасное качество видео! Спасибо!

  • @romanryaboshtan9270
    @romanryaboshtan9270 Před 2 lety +2

    ждём следующих видео по SOLID

  • @EngineerSpock
    @EngineerSpock  Před 3 lety

    Добавил ссылку на репозиторий. Если что здесь тоже дублирую: github.com/EngineerSpock/youtube-solid

  • @user-yl8tj3jm9j
    @user-yl8tj3jm9j Před 3 lety +3

    Связанность, связанность - БДСМ какой-то 😂👍. В общем не связывайся со связанностью связанной связанностью со связанностью 🤯🥳🎊

    • @EngineerSpock
      @EngineerSpock  Před 3 lety +3

      Связанность она такая) Сильная связанность проводит к БДСМу)

    • @user-yl8tj3jm9j
      @user-yl8tj3jm9j Před 3 lety +2

      @@EngineerSpock вы классный 😁👍

  • @EngineerSpock
    @EngineerSpock  Před 3 lety +2

    питонический код завтра добавлю, сорян!

    • @user-ew2pd6fq8j
      @user-ew2pd6fq8j Před 3 lety +1

      А как вы относитесь к языку Go ?

    • @EngineerSpock
      @EngineerSpock  Před 3 lety +1

      @@user-ew2pd6fq8j из того что мне о нём известно - не очень позитивно. Но высказываться не буду.

    • @user-yl8tj3jm9j
      @user-yl8tj3jm9j Před 3 lety +1

      @@user-ew2pd6fq8j гугл может забросить этот язык как и многие свои проекты, хотя вряд ли конечно, Go все-таки решает свои задачи. Но, если брать что-то мощьное, то лучше C++ для производительности, а для скорости разработки Python как оболочку. Хотя для быстрой и надежной синхронной многопоточной или асинхронной разработки Go очень силен! Да и с производительностью в Go все ок, единственное - маленькое комьюнити, мало вакансий, много плохих практик написания кода…, короче язык вроде новый, я к тому что развитие языка зависит от того на сколько хорошо он справился и какая у него финансовая и человека-сила-часы поддержка, так вот у Go с этим пока не очень ясно, Google вроде занимается им, да и Яндекс где-то у себя говорят пробует его, но C++ он не заменит потому что сборщик мусора, да и C# есть, этим все сказанно…, как ни крути, а C и C++ остаются самыми быстрыми языками высокого уровня…!

    • @user-ew2pd6fq8j
      @user-ew2pd6fq8j Před 3 lety +1

      ​@@user-yl8tj3jm9j спасибо за мнение, очень интересно, кстати видел возможность интеграции Go с Python, затем ее забросили вроде, видимо посчитали, что лучше конкурировать c Python чем стать одной из технологий ускорения питона. Вот тут эта возможность описана blog.filippo.io/building-python-modules-with-go-1-5/, типа можно скомпилировать .so файл и дальше "волшебство".

    • @user-yl8tj3jm9j
      @user-yl8tj3jm9j Před 3 lety +1

      @@user-ew2pd6fq8j хз друг, сомневаюсь я что там буду развивать прям интеграцию с пайтоном 🤷‍♂️, может и будут конечно, но в чем смысл? Типа быстро разрабатывать? Окей, если очень быстро разрабатывать и чтобы хорошая производительность, то да, но где? Сколько лет прошло…, где интеграция эта? 🤷‍♂️

  • @sashakopiika
    @sashakopiika Před 2 lety

    А про остальные принципы будут видео?

  • @user-xu5po3rk5t
    @user-xu5po3rk5t Před 2 lety

    Класс User надо разбить на два класса: UserLoginator и UserRegistrator?

  • @YourRets
    @YourRets Před 2 lety

    Юджин из ходячих мертвецов)

  • @user-zd3qw7le5c
    @user-zd3qw7le5c Před 9 měsíci

    3:36 . . . ЦИТАТА: "извлекая класс фабрику" . . . а где эта фабрика у вас в коде ?