SOLID принципы: SRP (Принцип единственной ответственности, Single Responsibility Principle)

  Переглядів 211,453

Sergey Nemchinskiy

Sergey Nemchinskiy

День тому

🔥 Новый поток моего авторского тренинга GRASP and GoF Design patterns стартует уже 01.02.2024
Регистрация 👉 go.foxminded.ua/3Uep1dr
1. На основе работы Роберта Мартина (дяди Боба). Акроним SOLID предложен Michael Feathers
2. SOLID (сокр. от англ. single responsibility, open-closed, Liskov substitution, interface segregation и dependency inversion)
1. SRP Принцип единственной ответственности (The Single Responsibility Principle) - Каждый класс должен иметь одну и только одну причину для изменений.
2. OCP Принцип открытости/закрытости (The Open Closed Principle) - программные сущности … должны быть открыты для расширения, но закрыты для модификации
3. LSP Принцип подстановки Барбары Лисков (The Liskov Substitution Principle) объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы
4. ISP Принцип разделения интерфейса (The Interface Segregation Principle) много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения
5. DIP Принцип инверсии зависимостей (The Dependency Inversion Principle) Зависимость на Абстракциях. Нет зависимости на что-то конкретное
3. Для чего нужны принципы SOLID
4. Запахи кода (Code smells) и антипаттерны
5. Собственный тренинг по паттернам и антипаттернам
6. Принцип единственной ответственности (SRP) каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс
7. Следование принципу:
1. Разделение больших классов, делающих многое
2. Слияние мелких классов и объединение в одном классе однотипоной функциональности
8. Упрощает поддержку и расширение классов
9. Антипаттерны - типа GoD object
10. Требует осмысленного отношения
11. Active Record нарушает SRP
Курсы для новичков:
JAVA - bit.ly/3gti9lR
JAVA Start - bit.ly/3fnwLSp
Инструментарий JAVA - bit.ly/2PpjldW
Automation QA (Java) - bit.ly/3fkMr92
ANDROID - bit.ly/3k7ejRv
C#/.NET - bit.ly/3glCdXg
C# START - bit.ly/3i70As2
PYTHON - bit.ly/33oYmAw
FRONT-END - bit.ly/39SKQpL
SALESFORCE Developer - bit.ly/2Xn2L2S
UI/UX дизайн - bit.ly/3i13HBW
Project management - bit.ly/30oGFyO
Обучение на проекте - bit.ly/3i74yRs
Продвинутые курсы для состоявшихся девелоперов:
GRASP and GoF Design patterns -
Enterprise patterns - bit.ly/3fmUnGZ
Сайт Foxminded: bit.ly/2BTPPKk
Foxminded в ФБ: / foxmindedco
FoxmindEd в Instagram: / foxminded.ua
Foxminded в VK: foxminded
Мой Telegram: t.me/nemchinskiyOnBusiness
Мой блог: www.nemchinsky.me
0:00 - вступление Сергея Немчинского
0:50 - все принципы SOLID вкратце
4:02 - для чего нужны принципы SOLID
5:42 - формулировка принципа SRP
6:47 - SRP на картинке
10:23 - как следовать SRP
11:35 - антипаттерн GoD object
12:15 - любые SOLID принципы требуют критического осмысления
13:20 - Active Record нарушает SRP

КОМЕНТАРІ: 463
@SergeyNemchinskiy
@SergeyNemchinskiy 7 днів тому
👨‍💻 После Senior ВСЕ? Как программисту развиваться после Senior и куда двигаться в айти? 👉 ukposts.info/have/v-deo/hp5-ZYWbaIp8xXU.html
@Mr43046721
@Mr43046721 3 роки тому
Ждём видео про "запахи кода".
@furevors
@furevors 3 роки тому
Поддерживаю, ждём!
@meduzka
@meduzka 3 роки тому
Очень
@pshavykin
@pshavykin 3 роки тому
да!
@kspshnik
@kspshnik 3 роки тому
плюс стопицот! очень-очень интересно :)
@alexxEquinox
@alexxEquinox 3 роки тому
Smells like teen spirit. It stinks of beer and drugs.
@sicknature0717
@sicknature0717 3 роки тому
Про code smell очень интересно было бы послушать. А так, спасибо за видео.
@justdeveloper3939
@justdeveloper3939 3 роки тому
+
@borokopshi
@borokopshi 3 роки тому
+
@aerahtv0000
@aerahtv0000 3 роки тому
+. хочется понять степень говенности моего кода)), так как самоучка
@aerahtv0000
@aerahtv0000 3 роки тому
@@alexlightweight Я просто недавно столкнулся с тем, что мой код разросся и стало сложно его модифицировать, а раз его сложно поддерживать, значит он -говно, я конечно сейчас перепаковываю всё в отдельные классы и функции, но интересно было бы знать, что ещё предпринимают для улучшения кода специалисты, такие как Сергей.
@AVENGER4565
@AVENGER4565 3 роки тому
@@alexlightweight ваши слова словно бальзам на душу. А то сидишь такой и думаешь "хоть бы мой код никто никогда не увидел, а то сразу скажут "что за дурак это проектировал"".
@Nikita04111991
@Nikita04111991 3 роки тому
Спасибо за видео!) P.S. Возьмите черный маркер, нечего не видно
@VITALIIBILYK
@VITALIIBILYK 3 роки тому
Спасибо за видео. Да, интересно и про SOLID и про ошибки.
@user-sh4wz1zn4r
@user-sh4wz1zn4r 3 роки тому
Видео топ. Обращу ваше внимание, товарищи, что мы с вами живём в тот день, когда стаж нашего слуги стал не большим, а ОЧЕНЬ большим!
@tonymax7503
@tonymax7503 3 роки тому
10/10. Для меня первый не нудный и не убитый жизнью автор, который так позитивно и интересно доносит тему. Всегда приятно освежить свои знания, и полезно услышать мнение человека с опытом. Лайк подпеска
@user-qv4hn6qq4n
@user-qv4hn6qq4n 3 роки тому
Сергей, смотрел ваши ролики раньше только потому что вы такой жизнерадостный пирожочек, но редко было такое, что тема была настолько понятно раскрыта чтобы я мог скидывать видео коллегам которые что-то не поняли, но в этот раз это прямо шедевр, самое главное что понятны жизненные ситуации, когда соблюдение такого принципе предотвратит серию катастроф.
@NummeSpnet
@NummeSpnet 3 роки тому
зеленый маркер, на белом фоне, и освещением. почему сразу желтый или белый не взять?
@AndreyDelay
@AndreyDelay 3 роки тому
🤣
@furrai
@furrai 3 роки тому
Это фишка Немчинского, так сказатб. Постоянно жалуются, что текст не видно. К чему изменять традициям)
@another4629
@another4629 3 роки тому
@@furrai Не фишка, а принцип ))
@zcbesaba
@zcbesaba 3 роки тому
круто, продолжайте эту серию, и делайте про другие принципы, наконец-то качественный контент, а не жевание одного и того же много раз.
@andyvoice
@andyvoice 3 роки тому
Спасибо! КОнечно ДА! п.с. спасибо что всё так подробно объясняете вплоть до "это ромбик", чтобы мы не додумывали и не тупили)
@romanmotovilov129
@romanmotovilov129 3 роки тому
Спасибо! Очень интересно! Продолжайте про все принципы!
@user-bt9hx3ik6e
@user-bt9hx3ik6e 3 роки тому
спасибо за разжевывание SOLID. очень нужная тема и простым языком.
@wandos777
@wandos777 2 роки тому
Спасибо Вам большое) Очень интересно Вас слушать на эти темы. Примерно год назад слушал это видео, но был, как я сейчас понял, даже еще не новичком, а пересматривая сейчас, понимаю, что эти принципы очень даже логичны и даже не осознанно сам так делаю) еще раз спасибо Вам за такие видео, однозначно лайк )
@UserUser-yk9bt
@UserUser-yk9bt 3 місяці тому
Спасибо большое за видео)
@user-td1ny2mg8q
@user-td1ny2mg8q 3 роки тому
Спасибо огромное за видео по SOLID, сейчас прохожу обучение и надо во всем этом разобраться.
@user-dp6dh3cx5k
@user-dp6dh3cx5k 3 роки тому
Однозначно один из лучших канонов по java и ООП в целом! Полезны любые видео по лучшим практикам написания кода, синтаксис выучить легко, а научиться правильно писать гораздо сложнее...
@OlegPetrow-dp1vp
@OlegPetrow-dp1vp Рік тому
Сергей, огромное спасибо за видео! Очень подробно и понятно! Вы отлично умеете объяснять
@user-rr1mw2lz1u
@user-rr1mw2lz1u 3 роки тому
Крутой формат, и видео как раз оптимальной длины
@user-hc5mg6zz7h
@user-hc5mg6zz7h 3 роки тому
Очень круто! Спасибо за видео.
@sancho2238
@sancho2238 3 роки тому
Очень интересно про SOLID, продолжайте)
@antondavinchi1533
@antondavinchi1533 3 роки тому
Определённо нужно больше таких видео!
@turalinov
@turalinov 2 роки тому
Спасибо за такое подробное объяснение принципов SOLID!
@denisovilya1888
@denisovilya1888 3 роки тому
тема определенно интересна, хотелось бы побольше таких видео - коротенько, суть, так сказать. Ведь самое сложное - дойти до простого. Когда большой тутор новичок теряется. Важно сначала понять суть, а потом уже можно вникать в детали. А у Сергея очень хорошая подача, что тоже очень важно
@shkippitor1895
@shkippitor1895 3 роки тому
ооо, вот это действительно классная тема ))))) спасибо, за Ваши видео ))))))
@eugenstakhursky9604
@eugenstakhursky9604 3 роки тому
13:10 - не, ну чё сразу котики, я вот Немчинского смотрю)
@Mr43046721
@Mr43046721 3 роки тому
а вдруг он тоже котик?
@goodvin8554
@goodvin8554 3 роки тому
@@Mr43046721 он лиса
@dark_evil77
@dark_evil77 3 роки тому
Denis ору)
@dijee678
@dijee678 3 роки тому
Спасибо за видио! Интересное тема, жду продолжения
@user-em8ns3nw7n
@user-em8ns3nw7n 3 роки тому
Спасибо. Очень познавательно и, главное, понятно.
@EnjoykinPlay
@EnjoykinPlay 3 роки тому
Ждём продолжения. Молодец Серёга.
@Brick87Game87
@Brick87Game87 3 роки тому
Идеальный формат, быстро и доходчиво!
@alexramov4165
@alexramov4165 2 роки тому
Огромное спасибо, что записали это видео. Программирование - это великая наука. А интересная просто ЖУТЬ как)))))))))))))))))) Однажды создав маленькую программу данный процесс уже не остановить!!!
@artmos6148
@artmos6148 3 роки тому
Сергей, разъясняете очень интересные и актуальные вопросы, продолжайте делиться знаниями по SOLID. Спасибо Вам за то, что делаете!
@demidovmaxim1008
@demidovmaxim1008 3 роки тому
Большое спасибо за выпуск!!!
@z.389
@z.389 3 роки тому
Спасибо за ваше время, если можно больше про принципов.
@Vlad_Gromov_1992
@Vlad_Gromov_1992 3 роки тому
Спасибо Сергей, еще не смотрел,но я думаю это будет отличное объяснение👍🏻👍🏻👍🏻👍🏻👍🏻
@DI-xs3kh
@DI-xs3kh 2 роки тому
Сергей, с Новым Годом! Желаю Вам и всей команде успеха и гармоничного развития. Сберегайте и приумножайте! Вас всегда полезно и интересно слушать.
@andrey12277
@andrey12277 3 роки тому
Огонь тема! Продолжайте!
@user-pn8vw8rr3m
@user-pn8vw8rr3m 3 роки тому
Сергей, предлагаю новую рубрику: рефакторинг с Сергеем Немчинским. Чтобы на практике увидеть "code smells" и как с ними бороться. У вас охрененный опыт, мне кажется он максимально раскроется в таком формате.
@iuripraporscic9285
@iuripraporscic9285 3 роки тому
Браво 👍❤ жду продолжения
@inglevir
@inglevir 3 роки тому
Спасибо! Я тоже программист с большим опытом (вероятно, не меньшим, чем у автора), и не то, чтобы меня настигло откровение в этом видео, но ещё разок вспомнить основы, рассказанные с чуть нового угла - всегда полезно и приятно.
@eugenstakhursky9604
@eugenstakhursky9604 3 роки тому
Интересно, спасибо Сергей!
@alexdec2109
@alexdec2109 3 роки тому
Спасибо, ждём продолжения
@MaceUA
@MaceUA 3 роки тому
Отличный формат видео!
@kseniyashamina9322
@kseniyashamina9322 3 роки тому
Тема очень важна и подача хороша.Ждем скорее продолжения)Спасибо) Еще ,если будет время,интересно послушать о ЛЯМБДА-ВЫРАЖЕНИЯХ и ФУНКЦИОНАЛЬНЫХ ИНТЕРФЕЙСАХ. Еще интересно послушать о классах String Builder и String Buffer. Про многомерные массивы и еще куча всего)))
@a.d.4418
@a.d.4418 3 роки тому
Ждал это видео от вас, еще не смотрел но уже знаю что все будет на уровне)))
@ivankobyuk8385
@ivankobyuk8385 Рік тому
Дякую шановний ! Дуже цікавий приклад Ви розглянули. Геть по іншому сприймав цей принцип. Насправді, тут можна багато прикладів різних типів класів. Тонна корисної інфи, варто це обережно пробувати ручками 🤝
@nemanjasekulic711
@nemanjasekulic711 2 роки тому
Спасибо вам за ваше видео!
@user-bp7zt9sn2w
@user-bp7zt9sn2w 3 роки тому
Тема супер, решил посмотреть сразу не смотря на то что опаздываю на работу. code smell тоже очень интересно
@at0m1x191919
@at0m1x191919 3 роки тому
Это любимая тематика видео
@wodzimierzletov2990
@wodzimierzletov2990 3 роки тому
Всё интересно! Всё делайте!
@antonhen23
@antonhen23 3 роки тому
Прекрасно, как всегда!
@coder3381
@coder3381 3 роки тому
Побольше таких видео. Здорово получается.
@xmafioza
@xmafioza 3 роки тому
Отличное видео, продолжайте. И да, не стесняйтесь длинных видео.
@OlegIgonin
@OlegIgonin 3 роки тому
Спасибо за видео. Нужно продолжение!))
@alexbendler943
@alexbendler943 2 роки тому
Спасибо, Сергей. Замечательное дополнение к книге дяди Боба.
@user-ms5pc2vj8u
@user-ms5pc2vj8u 2 роки тому
Крутой формат. Спасибо за инфу!
@alexanderraf5553
@alexanderraf5553 3 роки тому
Ураааааааа))))Спасибо, дождались наконец-то)
@user-nm8zk4hn4q
@user-nm8zk4hn4q 3 роки тому
Тема отличная!! Побольше таких видео!!
@azizkudaikulov993
@azizkudaikulov993 2 роки тому
Спасибо, очень интересно и очень нужно!
@user-ug5kc1dv2o
@user-ug5kc1dv2o 3 роки тому
Спасибо, интересно и доступно.
@AlanSmith2306
@AlanSmith2306 3 роки тому
Всё интересно. И про запахи и про всё остальное! Ждём-с )
@lexaznaurov5205
@lexaznaurov5205 3 роки тому
Сергей сказал в августе про SOLID, значит в августе про SOLID! )) Спасибо!
@RusIvan2022
@RusIvan2022 3 роки тому
Хотя это и самореклама, но. Очень приятный грамотный человек. Спасибо за труды. Не сомневаюсь что автор прекрасный преподаватель!
@nicolas267s
@nicolas267s 3 роки тому
Мне хоть уже и знакомы SOLID принципы, все равно с удовольствием прослушал. Повторение - мать учения.
@it-ninja804
@it-ninja804 3 роки тому
Отличное объяснение! Видео короткое, 15 минут. Но чтобы реально все из него осмыслить, нужно побольше времени)) Интересно было, хорошие примеры.
@user-zv4kq8ly2n
@user-zv4kq8ly2n 3 роки тому
конечно интересно про code smells.Спасибо за видео
@iliapopkov4432
@iliapopkov4432 3 роки тому
Супер-пупер интересно, спасибо)))
@pavelsamsonenka3155
@pavelsamsonenka3155 3 роки тому
Супер! Продолжайте
@zzshek
@zzshek 2 роки тому
спасибо за примеры и видео!
@Dmitrii-Zhinzhilov
@Dmitrii-Zhinzhilov Рік тому
Сергей, благодарю!
@Epenckorn
@Epenckorn 2 роки тому
Ну наконец-то. Хоть кто-то использует адекватные примеры. А то везде натыкаюсь на примеры, от которых возникает только один вопрос: "как про такую чушь бесполезную столько книг понаписали?" Теперь хоть понятно, что и так всегда его использовал) Спасибо
@user-hf3uo2js2f
@user-hf3uo2js2f 3 роки тому
Тема крутая, спасибо
@channeldsr9983
@channeldsr9983 3 роки тому
Интересно прослушать все затронутые темы
@dmitrykoposov796
@dmitrykoposov796 3 роки тому
Спасибо. То, что надо.
@user-le1xf8ul9y
@user-le1xf8ul9y 3 роки тому
Очень интересно. Жду продолжение
@gomer3894
@gomer3894 3 роки тому
спасибо за видео
@serhiirubets6630
@serhiirubets6630 3 роки тому
Спасибо, познавательно, продолжайте :)
@MERKYRIY-fn5rw
@MERKYRIY-fn5rw Рік тому
Про котиків і соцмережі- це ваще крутяк. Сміюся)))
@user-rl1hs3jf7l
@user-rl1hs3jf7l 3 роки тому
Конечно будет интересно послушать про Code Smells
@dmitry_shelemekh
@dmitry_shelemekh 3 роки тому
Спасибо! Тема интересная :)
@antonvalintsev1384
@antonvalintsev1384 3 роки тому
Круто! Спасибо!
@joekerman1114
@joekerman1114 3 роки тому
Супер! Как же дождаться последнего принципа теперь...
@akiloci2198
@akiloci2198 3 роки тому
Хорошо, что перешли к техническим видео, не помешает.
@user-fr5ty2ll2p
@user-fr5ty2ll2p 3 роки тому
Круто, жду продолжения. И про запахи кода тоже жду.
@user-bu3uk5zw7o
@user-bu3uk5zw7o 3 роки тому
Спасибо. Данная тематика интересна)
@alexandershchegretsov9615
@alexandershchegretsov9615 3 роки тому
Дичайше интересно, спасибо!
@andrew_golubev
@andrew_golubev 3 роки тому
про запахи интересно, спасибо за видео - интересно тема очень интересна + к остальным, что нужен чёрный маркер)
@ValueLevit
@ValueLevit 3 роки тому
Спасибо, полезно.
@vladislavzubov2818
@vladislavzubov2818 3 роки тому
Круто! Спасибо. Самое главное что в подаче материала нет заумных терминов/слов.
@dmitrypichugin7449
@dmitrypichugin7449 3 роки тому
Здравствуйте, а вы сами придумали этот пример или из книги взяли? Я просто другие примеры читал, и вот после многочисленных споров по пониманию SRP нашел видео где Мартин 50 минут про него говорит. Линк - ukposts.info/have/v-deo/f6RhgZWGf4GZsnk.html (с привязкой ко времени, в которое он дает определение). Главное в SRP, на сколько я понял - это то, чтобы модуль обслуживал одного актора (роль, группа пользователей), для решений задач которых и создан модуль. Дело о человеке, о той роли что он выполняет. Этот принцип чуть выше того что один метод должен выполнять что то одно. Например - у нас сайт с продажей видеокасет. По SRP у нас должны быть разные контроллеры, разные сервисы для Админа и Кастомера. Разные модули, для разных ролей. Изменяем Админку, не затрагиваем Кастомера и наоборот. Ну и внутри подроли - просматривающий отчет, ДБ администратор и т.п. Тут я сам не всегда понимаю где отличие от простого разбиение на функции. И получается что общий код (общий сервис, где то в глубине) может быть в общем модуле, но как только появляются отличия, код нужно разносить по разным модулям, каждый под свою роль, этот вопрос не очень раскрыт.
@yuriyfedoryshyn5206
@yuriyfedoryshyn5206 3 роки тому
О! Класс! Большое спасибо!!!:)
@MichaelAltair
@MichaelAltair 3 роки тому
Очень интересно. Про анти-паттерны прям надо!!!
@timurkleperson4033
@timurkleperson4033 3 роки тому
Ждем про code smells! Спасибо за видео
@marsianinm8349
@marsianinm8349 3 роки тому
Супер. Спасибо. Ждемс еще
@phil4765
@phil4765 3 роки тому
Класс, очень полезное, спасибо!
@user-hz3tr9bu1h
@user-hz3tr9bu1h 3 роки тому
спасибо, самое то, интересно было.
@kostyayarovyi3092
@kostyayarovyi3092 3 роки тому
Очень интересно, спасибо
@MrAlexT92
@MrAlexT92 3 роки тому
Пеннивайз реально годноту делает. Лайк подписка!)
@JohnDoe-tm1rv
@JohnDoe-tm1rv 3 роки тому
Хорошая серия. Интересно про Лисков послушать :)
@Dormynt
@Dormynt 3 роки тому
Продолжайте!
Великовозрастный программист. Стоит ли идти в IT в 40 лет
8:17
Дилетант широкого профиля
Переглядів 6 тис.
Принцип хорошего кода YAGNI ("You aren't gonna need it")
15:08
Почему нельзя возвращать NULL?
22:11
Sergey Nemchinskiy
Переглядів 114 тис.
Принцип разделения интерфейса. SOLID для React
8:57
Михаил Непомнящий
Переглядів 9 тис.
Как форматировать код правильно?  Clean Code
20:58
Sergey Nemchinskiy
Переглядів 25 тис.