Принцип единой ответственности. SOLID для React

  Рет қаралды 23,370

Михаил Непомнящий

Михаил Непомнящий

Жыл бұрын

Первый принцип SOLID - самый простой в понимании, но самый часто нарушаемый. Разбираемся с принципом единой ответственности и смотрим, что он значит в контексте React-приложения.
Мои курсы по вебу с купонами:
✅ mishanep.com/
📢 Поддержка канала:
/ mishanep
www.tinkoff.ru/rm/nepomnyasch...
paypal.me/mishanep

Пікірлер: 95
@user-pl6xx3xk9t
@user-pl6xx3xk9t Жыл бұрын
Очень приятно слушать. Идеальный голос для преподования. Подача контента - отличная. Спасибо за работу)
@user-ub2rg3eg8z
@user-ub2rg3eg8z Жыл бұрын
Отличный материал и подача. Ваше место в тим-лидах и менторах. Только человек который обладает такой эмпатией успешно справиться с этой ролью. Браво.
@SergiyAntonyuk_PhD
@SergiyAntonyuk_PhD Жыл бұрын
Так Михаил ДОЛГОЕ ВРЕМЯ преподавал :-)
@user-ub2rg3eg8z
@user-ub2rg3eg8z Жыл бұрын
@@SergiyAntonyuk_PhD заметно
@sergey_zatsepin
@sergey_zatsepin Жыл бұрын
Эмпатия при межличностном общении проявляется, а не через экран
@TheProfessionalGambler
@TheProfessionalGambler Жыл бұрын
А как так эмпатию определять?
@YuryKorotovskikh
@YuryKorotovskikh Жыл бұрын
@@TheProfessionalGambler если у человека самого развита эмпатия - то он лучше и быстрее может понять, кто перед ним, иногда даже только по голосу и манере говорить, хотя, конечно, так легче ошибиться
@vladk1975
@vladk1975 Жыл бұрын
Единственный человек от которого я смог понять один из принципов
@rodionme
@rodionme Жыл бұрын
Спасибо за видео. Интересная тема! Мне кажется, основная сложность в применении этого метода - уловить грань между тем, когда компонент остается понятным и читабельным и тем, когда его уже пора дробить на более мелкие кусочки логики. Понимать «единственную ответственность» в случае с реактом можно по-разному. Например, в реальном проекте изначальный код, скорее всего, остался бы в таком же виде, потому что он вполне понятен и прост. Можно сказать, что этот компонент решает единственную задачу - отрисовывает полученный список задач. Точно так же можно сказать про абстрактный компонент страницы - он отрисовывает одну страницу. Т.е. решает одну задачу, несмотря на то, что логики на странице может быть очень много. Я думаю, целью в случае с реакт-компонентом должна быть простота логики и относительная краткость, которую можно мерять в условных экранах или строчках кода. Например, принять за правило, что «компонент должен помещаться в 200 строк». При этом чрезмерное дробление логики может привести к тому, что с таким кодом будет просто неудобно работать. Но все это сложно формализировать, конечно. Чувство этой «грани» приходит с практикой.
@user-bp7jb5of5d
@user-bp7jb5of5d Жыл бұрын
Михаил, спасибо за ваш труд и ваши образовательные видео. У вас отличная подача и отменное качество материала. С нетерпением жду видео о дальнейших принципах SOLID.
@user-pr6pn9mu9t
@user-pr6pn9mu9t Жыл бұрын
Михаил, спасибо большое за ваши видео!
@mars_family
@mars_family Жыл бұрын
Спасибо большое, очень жду продолжения 🙏🙏🙏
@user-pi1vr6rf1k
@user-pi1vr6rf1k Жыл бұрын
Очень приятный тембр и интонация голоса. Про смысловую составляющую я вообще молчу) Видео смотреть одно удовольствие! Спасибо за труды
@ilyaprotsenko1023
@ilyaprotsenko1023 Жыл бұрын
Отличная тема! Спасибо большое за материал!
@sergsergey4251
@sergsergey4251 Жыл бұрын
Спасибо, отличное видео!
@rudakov_ilya
@rudakov_ilya Жыл бұрын
Михаил, спасибо, что делаете такой крутой и полезный контент!
@Skif769
@Skif769 Жыл бұрын
Классную тему подняли Михаил, ждём новых видео, большое спасибо, что помогаете сообществу.
@user-mu2lr9zc7d
@user-mu2lr9zc7d Жыл бұрын
Спасибо за видео, и простой и наглядный пример!
@AleksandrNeo
@AleksandrNeo Жыл бұрын
Большое спасибо, то что нужно!!!
@AleksandrNeo
@AleksandrNeo Жыл бұрын
Отдельное спасибо за пример и анимацию, понимание гораздо быстрее приходит) Пойду применять на практике)
@user-uf8nw6uc9z
@user-uf8nw6uc9z Жыл бұрын
Очень хорошая подача материала. Жду следующее видео по данной теме SOLID
@fuad2069
@fuad2069 Жыл бұрын
Ооо крутяк!! Спасибо вам огромное
@anonlog
@anonlog Жыл бұрын
Михаил, спасибо за такое крутое объяснение, с примерами и наглядностью! Очень замечательное видео, ждем продолжение. Теперь хочется сделать большой рефакторинг кода в своих приложениях))😀
@nepcz
@nepcz Жыл бұрын
У Михаила всегда очень полезный контент, для моего уровня
@rubylnic
@rubylnic 11 ай бұрын
спасибо! отличное видео, не хватало такого ясного объяснения принципов именно на примере реакта
@vadimkiryanov4933
@vadimkiryanov4933 Жыл бұрын
Очень классное и полезное видео. Сравнительно недавно все хотел начать изучить эти принципы, но не особо мог найти подходящий материал для изучения. С нетерпением жду нового видео по следующим принципам.
@AGM140580
@AGM140580 Жыл бұрын
Отличный контент! Большое спасибо!
@alexperemey6046
@alexperemey6046 Жыл бұрын
Главное, не доводить использование этих принципов до абсурда. Как говорил Джек Воробей - "Кодекс - это рекомендации, а не жесткие правила"
@gegrbydfcz
@gegrbydfcz Жыл бұрын
Капитан Джек Воробей!
@promoabys
@promoabys Жыл бұрын
Да, Михаил, спасибо. И отдельное за практический пример, потому что действительно в теории звучит всё просто, а на практике это всё превращается тяжело поддерживаемый код и длинные портянки
@Sashaa
@Sashaa Жыл бұрын
Спасбо большое за видео особенно с примерами про реакт
@user-888azim-97
@user-888azim-97 Жыл бұрын
буквально вчера читала на хабре с этими иллюстрациями, роботами. тоже понравились картинки)
@kirillpavlovskii8342
@kirillpavlovskii8342 Жыл бұрын
спасибо вам, отличное видео!
@nepcz
@nepcz Жыл бұрын
Когда возникает у меня вопрос, всегда держу в памяти, что это есть у Михаила на канале и пользуюсь этим как закладкой в книге.
@_GreenSnake_
@_GreenSnake_ Жыл бұрын
Спаибо за Ваш труд
@JackShepards
@JackShepards Жыл бұрын
Спасибо. Было интересно
@IgorBerezhnoy-md3ir
@IgorBerezhnoy-md3ir 3 ай бұрын
Очень круто!!!!
@korvinkori_
@korvinkori_ Жыл бұрын
Эх как же годно, спасибо большое
@chikichik4164
@chikichik4164 Жыл бұрын
Класс, спасибо!
@egorpobylets6597
@egorpobylets6597 9 ай бұрын
Спасибо! Отлчиное видео по SOLID по SRP
@armancherkharov9410
@armancherkharov9410 10 ай бұрын
Михаил, всегда с большим удовольствием смотрю ваш образовательный контент. Ваше имя в узких кругах всегда ассоциируется с глубокой экспертизой. Большое спасибо, что находите в себе силы делиться.
@javobkerak5859
@javobkerak5859 Жыл бұрын
Спасибо попробую действовать
@sergey_zatsepin
@sergey_zatsepin Жыл бұрын
Оооо сеньёрские штучки пошли в дело! Хорош!
@tigranharutyunyan7674
@tigranharutyunyan7674 Жыл бұрын
Спасибо за работу. На практике, например контейнер или контролер компоненты, где собирается большая форма с многими кастомными компонентами запросто может набрать пару сотен линий кода.
@vladimirmuratov2220
@vladimirmuratov2220 Жыл бұрын
Огромное спасибо!!! Для такого дурака как я - это самое доходчивое объяснение 😄
@Moishe_Rubinstein
@Moishe_Rubinstein Жыл бұрын
Мишаня вы супер. Давайте темы помощнее.
@Lotpite
@Lotpite Жыл бұрын
реально простой пример 🙂
@user-nr4ry1uc4l
@user-nr4ry1uc4l Жыл бұрын
Спасибо
@raufhashimov241
@raufhashimov241 Жыл бұрын
Спасибо огромное, а будет и другие принципы SOLID?
@unknown.6914
@unknown.6914 4 ай бұрын
Идем дальше )
@velikorossnationalist4259
@velikorossnationalist4259 Жыл бұрын
Спасибо за лекцию! Кстати огромный класс/компонент/функция и т.д. называется - God Object. Это антипаттерн.
@Icanfly-
@Icanfly- 9 ай бұрын
God он не из за огромности назван был, а за то что делает все подряд, нарушая принцип единой ответственности
@lba1092
@lba1092 Жыл бұрын
просто имбааааа
@vsevolodaleynikov8844
@vsevolodaleynikov8844 Жыл бұрын
Спасибо, интересная информация. Но и без SOLID (S), точнее этого термина, со временем и так приходит истина что компоненты нужно дробить и чтобы каждый компонент отвечал за что-то одно иначе будет полная каша. Например, как вы уже продемонстрировали в ролике, никаких запросов fetch/axios не должно быть в компоненте, их все нужно выносить в отдельные папки и файлы. Можно еще привести пример: на многих страницах приложения используется таблицы, тут уже напрашивается, что нужно сделать отдельную компоненту и передавать в нее данные. И тем самым с этой компонентой будет просто работать и модифицировать в будущем (стилизовать, добавить фильтрацию, сортировку и т.п.)
@aleksandr2245
@aleksandr2245 Жыл бұрын
дядя Боб в своей книге Чистая Архитектура, как раз пишет об этом, что SRP - это не совсем про то, что наша функция/модуль/класс должна выполнять что-то одно, в его блоге есть целая статья на эту тему >> And this gets to the crux of the Single Responsibility Principle. This principle is about people. >> Gather together the things that change for the same reasons. Separate those things that change for different reasons. >> However, as you think about this principle, remember that the reasons for change are people. It is people who request changes.
@mishanep
@mishanep Жыл бұрын
Как вы понимаете данные данные цитаты? И как, по-вашему, мы можем применять их в Реакт-приложении, написанном в функциональном стиле?
@aleksandr2245
@aleksandr2245 Жыл бұрын
@@mishanep на мой взгляд не имеет принципиального значения какой стиль/парадигму мы используем, я думаю то, про что Вы рассказываете в своём видео относится больше к рефакторингу, когда мы большие компоненты дробим на более мелкие, что-то выносим, чтобы наша функция/функциональный компонент делал "что-то одно", решал одну задачу. Тут ещё интерсный вопрос, а что значит что-то одно? Как раз функциональные компоненты, по-моему мнению, здесь очень показательны , ведь они не "делают что-то одно" на самом деле, они зачастую инкапсулируют в себе логику, состояние, ещё и перезентационную составляющую, но в реакте это абсолюно нормальный подход. Мартин Р. вводит в SRP такой термин как module, и мне кажется, вот тут и заключается основная идея, в том, что наш модуль (нечто более глобальное) должен иметь одну причину на изменение и этой причиной является конечный потребитель. Если спроецировать это на реакт приложение, у нас может быть, условно, модуль/компонент Калькулятор, который в свою очередь может состоять из други модулей/компонент, к которым мы можем применить те принципы (подходы), про которые Вы рассказываете в видео, e.g. дробление на более мелкие компоненты, вынос логики в кастомные хуки, дробление презентационной части и т.д., а Калькулятор сам по себе должен измениться по требованию потребителя, который этим калькулятором пользуется, что-то вычисляет с его помощью, а если бы наш модуль Калькулятор проигрывал ещё и музыку, то тут мы бы нарушили SRP и у нашего модуля появилась бы ещё одна причина на изменение (от тех пользователей, которые слушают музыку). Я, конечно, могу ошибаться, я не эксперт и себя таковым не считаю, это сугубо моё личное мнение и интерпретация SRP
@mishanep
@mishanep Жыл бұрын
Спасибо за развернутый ответ. В моем понимании когда мы говорим про изменения функционала, то здесь больше история про open-closed принцип.
@mdbm
@mdbm Жыл бұрын
Расскажите пожалуйста как применяется данный принцип при разработке структуры редьюсеров. Плодить отдельный редьюсер для каждого отдельного глобально используемого состояния или же объединять их в группы? Например пользователь выбрал тему сайта, выбрал текущую категорию товаров, выбрал текущую валюту и выбрал текущую ширину экрана своего браузера. Стоит ли объединить все эти «текущие» в один редьюсер currents с ключами или же для каждого создать отдельный редьюсер и наплодить их с десяток и более ?
@nouchance
@nouchance Жыл бұрын
Super!
@romanmed9035
@romanmed9035 Жыл бұрын
конечно все правильно. но если используются пару десятков инпутов для создания пачки фильтров с разными данными и функциями при изменении и выборе, то как это разделить?
@barrabekuss4269
@barrabekuss4269 Жыл бұрын
Это один из главных принципов, который обязаны применять в проекте. Сейчас работаю над проектом с классовыми компонентами. Прилетает небольшая правка, думаешь часа на два, открываешь компонент….. а там компонент на 2-3 тысячи строк кода и твои два часа превращаются в два дня😬
@sergey_zatsepin
@sergey_zatsepin Жыл бұрын
Почему не рефакторите?
@barrabekuss4269
@barrabekuss4269 Жыл бұрын
@@sergey_zatsepin некогда. В ту ду по 20 тасок висят
@alexperemey6046
@alexperemey6046 Жыл бұрын
И да, я бы не отказался в рамках темы послушать о том, насколько разделяет первый принцип паттерн Синглтон, является ли он антипаттерном, и какую роль он играет во фронтенд разработке.
@katada
@katada Жыл бұрын
Топ!
@shoxerpetrosyan8678
@shoxerpetrosyan8678 Жыл бұрын
Михаил, в основном массиные компоненты получаются,когда есть группа импутов.Понимаю,что громоздкость возможно сократить с помощью мап а данных импутов,но если это разные типы и функции онченджа
@umarjuraev1624
@umarjuraev1624 Жыл бұрын
круто
@profesor08
@profesor08 Жыл бұрын
Интересно как будут натягиваться следующие принципы solid на react. Там все непросто.
@NeoCoding
@NeoCoding 7 ай бұрын
есть еще такое понятие оверинжениринг когда дробят настолько мелко компоненты учитывая что нет переиспользования дальнейшего что очень неудобно рыскать по закладкам собирая эти атомы в молекулы
@catweb666
@catweb666 Жыл бұрын
Когда ты говоришь Здраствуйте, меня зовут Михайл Непомнящий, в этот момент я понимаю что что-то забыл. )))
@WhenImAloneI
@WhenImAloneI Жыл бұрын
Вдохновился видео и зарефакторил 300 строчек в 50;)
@singlebw265
@singlebw265 11 ай бұрын
Михаил подскажите пожалуйста название утилиты ограничивающая строчки компонентов
@mishanep
@mishanep 11 ай бұрын
Prettier
@enenotowitch628
@enenotowitch628 Жыл бұрын
7:20
@golang6212
@golang6212 Жыл бұрын
Во время видео про SOLID вышло. Как раз таки Деда Боба читаю :)
@splcell
@splcell Жыл бұрын
Solid Snake
@Ogrizkov
@Ogrizkov Жыл бұрын
Извиняюсь за занудство, но Бедняга Боб Мартин не устает повторять, что SRP - это про то, что компонент программы должен иметь только одну причину для изменения. Например продажи не могут требовать изменения метода (если им не нравится сумма затрат), который сделан для расчета налогов для бухгалтерии. Это не совсем то, о чем вы говорите. Вы говорите о более широком правиле, что компонент решает только одну задачу. Это не то что подразумевается в первом принципе SOLID. 🤗 Ссылаюсь на книгу Clean Architecture
@mishanep
@mishanep Жыл бұрын
Всё это, конечно, хорошо. Но как бы вы адаптировали это в реалии Реакт приложения, написанного в функциональном стиле?
@sergey_zatsepin
@sergey_zatsepin Жыл бұрын
Ну ты выдал... Палюбе сам не понял, что написал
@UserSo4reUsu75ry
@UserSo4reUsu75ry Жыл бұрын
Только не единая, а единственная. Почему-то многие переводят это не правильно
@zahar1381
@zahar1381 Жыл бұрын
nice xdd
@user-wl5jq2mx7d
@user-wl5jq2mx7d Жыл бұрын
Автор видео сам наверное до конца не понял отчем это принцип, я рекомендую почитать книгу «чистая архитектура», где правильное определение принципа «единственной ответственности» и про что на самом деле этот принцип. То что компонент, функция и т.д. должны делать что-то одно это не про SRP.
@mishanep
@mishanep Жыл бұрын
Автор видео старается от себя ничего не придумывать, а делать выжимку на базе существующих материалов на английском языке. Вообще мною было замечено, что как только речь заходит про какие-то принципы в программировании, лучшие практики или (особенно) шаблоны проектирования, то сразу появляется группа экспертов по этим вопросам, считающая что "автор не прав". При этом эксперты могут высказывать противоположные мнения, либо вовсе избегать высказывания своего видения, указывая на матчасть. Безусловно, есть академический подход, когда мы помимо предполагаемой подачи начинаем сравнивать точки зрения, может быть спорить с ними, прилагать источники цитирования. Но в погоне за академичностью можно в итоге ничего не сделать или только запутать тех, кто начинает разбираться в вопросе. По факту я рассказываю о том, что читал сам и в каком ключе это обсуждалось мною с коллегами по проектам. По итогам цикла я скорее всего приложу источники, которыми пользовался при подготовке.
@sergey_zatsepin
@sergey_zatsepin Жыл бұрын
Расскажите вкратце
@user-wl5jq2mx7d
@user-wl5jq2mx7d Жыл бұрын
@@sergey_zatsepin , что рассказывать, открываешь книгу «чистая архитектура» глава III параграф 1.
@AlexandrPuzakov
@AlexandrPuzakov Ай бұрын
Автор не совсем понимает SRP. Тот же Роберт Мартин отдельно упоминает, что "функция должна делать что-то одно" это отдельный принцип, не относящийся к SRP
@dmitry7417
@dmitry7417 Жыл бұрын
При использовании Material UI или Tailwind уложиться в компоненте в 100 строчек становится непросто.
@xD-hu3gw
@xD-hu3gw Жыл бұрын
😂300-500 это еще терпимо, а по 2-3к строк компоненты?)))
@user-wl5jq2mx7d
@user-wl5jq2mx7d Жыл бұрын
Ну вообще то принцип называется «принцип единственной ответственности» , а не единой.
@aheroofourtime2415
@aheroofourtime2415 Жыл бұрын
Продай мне ручку уже устарело, теперь продай мне: single responsobility. Хорошо продал)
@telepuzzzik1
@telepuzzzik1 Жыл бұрын
Спасибо
Принцип открытости/закрытости. SOLID для React
14:51
Михаил Непомнящий
Рет қаралды 14 М.
Принцип подстановки Лисков. SOLID для React
15:26
Михаил Непомнящий
Рет қаралды 12 М.
When You Get Ran Over By A Car...
00:15
Jojo Sim
Рет қаралды 33 МЛН
아이스크림으로 체감되는 요즘 물가
00:16
진영민yeongmin
Рет қаралды 58 МЛН
Зачем он туда залез?
00:25
Vlad Samokatchik
Рет қаралды 2,8 МЛН
تجربة أغرب توصيلة شحن ضد القطع تماما
00:56
صدام العزي
Рет қаралды 57 МЛН
Принцип разделения интерфейса. SOLID для React
8:57
Михаил Непомнящий
Рет қаралды 10 М.
Просто о ООП (Парадигмы ООП)
21:14
webDev
Рет қаралды 41 М.
Single Responsibility Principle in React (Design Patterns)
16:50
Cosden Solutions
Рет қаралды 46 М.
Кастомные React-Хуки, useToggle, useLocalStorage
22:20
Михаил Непомнящий
Рет қаралды 19 М.
Frontend Собеседование с разбором. Путь к трудоустройству 2024
41:18
Top 50 Amazon Prime Day 2024 Deals 🤑 (Updated Hourly!!)
12:37
The Deal Guy
Рет қаралды 1,4 МЛН
Копия iPhone с WildBerries
1:00
Wylsacom
Рет қаралды 99 М.
Смартфон УЛУЧШАЕТ ЗРЕНИЕ!?
0:41
ÉЖИ АКСЁНОВ
Рет қаралды 1,1 МЛН