SOLID принципы: ISP (Принцип Разделения Интерфейса (The Interface Segregation Principle)

Поділитися
Вставка
  • Опубліковано 25 лип 2024
  • ISP Принцип разделения интерфейса (The Interface Segregation Principle) много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения
    Курсы для новичков:
    JAVA - bit.ly/3kDVgyN
    JAVA Start - bit.ly/3kIrg4Q
    Инструментарий JAVA - bit.ly/31OjxcK
    Automation QA (Java) - bit.ly/2DXjF1p
    ANDROID - bit.ly/2CtiDd4
    C#/.NET - bit.ly/3gVHKnM
    C# START - bit.ly/31NXMtE
    PYTHON - bit.ly/30Rscfg
    FRONT-END - bit.ly/3fZcLWp
    WORDPRESS Developer - bit.ly/2Cq9HoF
    SALESFORCE Developer - bit.ly/2Fg3VXK
    UI/UX дизайн - bit.ly/2CoaCpC
    Project management - bit.ly/3gVptqJ
    Обучение на проекте - bit.ly/31T93Jf
    Продвинутые курсы для состоявшихся девелоперов:
    GRASP and GoF Design patterns - bit.ly/2DWD9mG
    Enterprise patterns - bit.ly/3fWlZ5O
    Сайт Foxminded: bit.ly/2CpCKc5
    Foxminded в ФБ: / foxmindedco
    FoxmindEd в Instagram: / foxminded.ua
    Foxminded в VK: foxminded
    Мой Telegram: t.me/nemchinskiyOnBusiness
    Мой блог: www.nemchinsky.me
    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) Зависимость на Абстракциях. Нет зависимости на что-то конкретное
    1. в формулировке Роберта Мартина декларирует, что клиенты не должны зависеть от методов, которые они не используют. То есть если какой-то метод интерфейса не используется клиентом, то изменения этого метода не должны приводить к необходимости внесения изменений в клиентский код.
    2. Следование принципу ISP заключается в создании интерфейсов, которые достаточно специфичны и требуют только необходимый минимум реализаций методов
    3. Избыточные интерфейсы, напротив, могут требовать от реализующего класса создание большого количества методов, причём даже таких, которые не имеют смысла в контексте класса.
    4. перекликается с принципом единственной ответственности
    5. снижает сложность поддержки и развития приложения
    6. Чем проще и минималистичнее используемый интерфейс, тем менее ресурсоёмкой является его реализация в новых классах, тем меньше причин его модифицировать
    0:00 - вступление Сергея Немчинского
    0:36 - все принципы SOLID в короткой формулировке
    2:47 - формулировка принципа разделения интерфейса (The Interface Segregation Principle / ISP)
    3:17 - Принцип разделения интерфейса на примерах
    9:01 - почему хорошо следовать принципу ISP

КОМЕНТАРІ • 171

  • @SergeyNemchinskiy
    @SergeyNemchinskiy  3 місяці тому

    👨‍💻 После Senior ВСЕ? Как программисту развиваться после Senior и куда двигаться в айти? 👉 ua-cam.com/video/NnM1Od1TKdA/v-deo.html

  • @volodymyrhavrylov7993
    @volodymyrhavrylov7993 3 роки тому +161

    Побил фронтендеров. Они спросили за что. Я сказал что Немчинский разрешил. Они спросили кто это. Ещё раз побил.

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

      как они посмели не знать кто это)

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

    С удовольствием посмотрел все Ваши видео. Большое спасибо! Очень информативно и в то же время только по сути.

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

    Обожаю твои видео. Каждое объяснение - не чтение с листочка, а пропитано колоссальным объёмом опыта.
    Очень хочется услышать от тебя больше объяснений других абстрактных тем, типо того же рефакторинга, архитектуры приложений, а так же "DRY, KISS, YAGNI" как уже упоминалось :)
    Спасибо тебе!

  • @yogiraj-tv
    @yogiraj-tv 4 роки тому +2

    Сергей, спасибо, ждем другие принципы!

  • @user-pv3hz3bw1g
    @user-pv3hz3bw1g 4 роки тому +25

    Спасибо. Наконец то я хоть как то начал понимать структуры ООП, а не лепить их по принципу "Работает"

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

      радует :)

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

      А как же главный принцип "И так сойдет"?))))

  • @sc-nt4gr
    @sc-nt4gr 4 роки тому +5

    Спасибо) У нас недавно дали интернет, а тут уже почти все принципы разобрали)

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

    Спасибо! Наконец-то нашел хорошее объяснение SOLID.

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

    Спасибо. Очень интересно послушать про TDD и про то как писать юнит тесты. В смысле что тестировать, на что тестировать.

  • @asnpost
    @asnpost 4 роки тому +29

    Сергей, мне реально нравится, как вы объясняете самые разные самые сложные темы просто и доступно. Уверен, что и любую из тех, что просят в комментариях вы классно расскажете. А вот увижу ли я когда-нибудь у Вас в руках маркеры или фломастеры, которые рисуют на бумаге хорошо видимые линии и буквы, я не уверен. Хотя я в общем-то оптимист. И верю в чудеса. Особенно в то, что вы сумеете сотворить чудо изображений на бумаге. Ну, всем нам удачи и спасибо за видео!

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

      Я за теплоту и ламповость. Красиво анимированные ролики, где закадровый голос рассказывает как и что, и при этом появляются на экране какие-то схемы - круто, но не так чтобы впечатывается в память.

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

      что, ждем, когда Сергей начнет объяснять тонкости квантовой физики простыми словами?)))

  • @gaitavr1992
    @gaitavr1992 4 роки тому +8

    Очень важный принцип, идет рука об руку с первым, лайк!

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

      на самом деле все принципы СОЛИДа тесно переплетаются между собой

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

    Большое спасибо за выпуск!!!

  • @user-bj1ik2qz5z
    @user-bj1ik2qz5z 4 роки тому +9

    Очень интересно, говори про всё)

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

    Конечно интересно и про другие принципы!

  • @nanvlad
    @nanvlad 4 роки тому +122

    Следующими надо делать DRY, KISS, YAGNI и рефакторинг

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 роки тому +12

      а планах

    • @AlexanderPerechnev
      @AlexanderPerechnev 4 роки тому +5

      Следующим надо писать нормальный код, а не писать архитектуры ради архитектур.

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

      Andrew Valkin это они ещё до VIPER и кодогенерации не дошли, где на один экран с одной кнопкой создаётся 48 классов и 93 протокола )

    • @user-ey5xw2nx9s
      @user-ey5xw2nx9s 3 роки тому

      @@AlexanderPerechnev Лол, надеюсь, что я когда-нибудь прикоснусь к этим сокровенные знаниям по архитектуре приложения

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

      @@AlexanderPerechnev Он сам попросится когда, сложность проекта возрастет. На мелких понятно, что Viper использовать избыточно.

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

    Ставлю каждый принцип на повтор и смотрю пока не пойму и запомню. Помогает.

  • @user-xj2xs3mz9v
    @user-xj2xs3mz9v 3 роки тому

    пока самый сильный видос из цикла. спасибо!

  • @user-by3wf7tp9c
    @user-by3wf7tp9c 4 роки тому +4

    Да, итересно узнать про другие принципы

  • @P1oN4ik
    @P1oN4ik 4 роки тому +5

    "Немчинский разрешил" - понял, буду юзать, спасибо )
    Спасибо за крутой поучительный контент!

  • @UserUser-yk9bt
    @UserUser-yk9bt 5 місяців тому

    Большое спасибо за видео)

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

    Про другие принципы ОЧЕНЬ ИНТЕРЕСНО!!!
    Да и воообще про другие слова типа KISS и т д

  • @tubeworld1963
    @tubeworld1963 4 роки тому +11

    Все очень круто, но хотелось бы увидеть объяснение ( конкретно этого принципа) на примере с кодом.

  • @FrolovDaniil
    @FrolovDaniil 4 роки тому +37

    10:30 - Скинул своим фронтендерам. Сказали, что теперь боятся получить по голове и больше на работу не придут.

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

      значит, они - не фронтендеры, а вротэнберы )))000

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

      @@TheYuvelir Или он им дает задание и говорит что должно быть сделано вчера.

    • @homo-ergaster
      @homo-ergaster 3 роки тому +1

      Мне если фронтендер скажет дать хоть что-нибудь, я ему дам пару примитивных методов типа findById и save и буду ждать что он с ними сможет сделать

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

      Наверное, потому что и этого обычно не дают.)

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

      я бы не сильно боялся, т.к. скинул это человек который не знает разницу между "ться" и "тся"

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

    я вас очень уважаю! классный учитель

  • @user-bp7zt9sn2w
    @user-bp7zt9sn2w 4 роки тому

    Очень интересно про другие принципы.

  • @user-xj2xs3mz9v
    @user-xj2xs3mz9v 3 роки тому +1

    чьёрт побьери. никогда не доводилось слышать такую формулировку ISP. а ведь она чертовски верная!

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

    Про остальные принципы тоже интересно

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

    Сергей вы мне очень по душе , но каратин сделайте скидки на курсы я сразу пойду, вы прекрасный учитель

  • @user-bn8wj4tq1i
    @user-bn8wj4tq1i 3 роки тому +9

    Все круто, кроме одного - надо срочно заправить все маркеры!

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

    Спасибо большое 👍👍👍👍👍👍👍👍👍

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

    Классная футболка :D

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

    Спасибо.
    Круто было бы еще про ACID.

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

      Упс. Уже нашел на вашем канале) Спасибо

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

    Спасибо спасибо спасибо 🙏🙏🙏

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

    Про легкость реализации Mock-объектов интересно подмечено

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

    Наконец-то грамотное объяснение ISP. Объяснение, в котором под клиентом подразумевается именно клиент (клиентский код), а не сервис, реализующий интерфейс. 99% статей/видео в качестве каноничного нарушения приводят ситуацию, когда сервис, реализующий большой интерфейс, вынужден бросать исключения в одном или нескольких методах, определенных в интерфейсе, потому что эти методы для него не релевантны. Но это, скорее, побочное явление, возникающее при нарушении ISP. Клиенты в таких статьях, как правило, вообще не рассматриваются. А начинать надо именно с них, потому что, как, опять же, сказано тут, именно клиенты определяют абстракции.

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

    Лайк не глядя. Видео - в плейлист "to study". Спасибо за полезный контент и хорошую подачу!

  • @user-ed6ve4ge5g
    @user-ed6ve4ge5g 4 роки тому +1

    Круто. Оооочень жду видео про возвращение NULL. Почему не надо так делать и как делать чтобы было правильно.

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

      главное, чтобы Немчинский не вернул null вместо видео)))))

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

    отлично

  • @user-gz3kb6qy3z
    @user-gz3kb6qy3z 4 роки тому +4

    Интересно про другие принципы

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

    Про то, что заказчик/фронтендер должен описать что он хочет увидеть это в точку.

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

    Расскажите про другие принципы, пожалуйста!

  • @user-vs6ok5yt7z
    @user-vs6ok5yt7z 3 роки тому +1

    Сергей, расскажите про перспективы языка программирования Kotlin в бэкенд разработке.

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

    Здравствуйте, Сергей!
    С большым интересом смотрю ваши видео. Понятны становятся вещи, которые вы объясняете.
    Только вот мне плохо видно на доске. Маркеры еле пишут или оранжевый фон перебивает зелёные цвета... Может сменить цвет на бордовый?

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

    Сергей, а можно видео на тему: хватает ли у программистов времени на какое-то хобби, не связанное с программированием, могут ли программисты реализовываться потихоньку в какой-то другой области параллельно с работой

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

      Нет, разве что по выходным 😉

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

    ❤️

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

    Интересны все принципы Роберта Мартина!

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

    👍

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

    Agile и его связь Scrum было б интересно послушать)

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

    Был фасад налоговой системы, а они там вдруг поумнели и сделали нормальную систему.
    Звучит на грани фантастики )

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

    Вопрос: IF должен наследоватся от IP? Или как?

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

    Vi super, vse video kotorie ya smotriu, srazu ponemaiu!!

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

    Боба Мартен... Давай ещё другие принципы Джорджа Мартина, будет крайне полезно нам всемь!

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

      хорошая тема, я подумаю

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

      Там два принципа: все сношаются, все умирают.

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

    В назві відео не закрив дужку ")"!
    Чому воно працює!?
    Дякую за крутий контент!!!

  • @r2d2925
    @r2d2925 4 роки тому +26

    Каким нужно быть человеком, чтобы за такой розжев солида диз влепить.

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

      конченным =(

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

      Человеком ли...?!

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

      Не знаю, у меня никаких дизлайков нет, 2.7 к лайков, вот это уровень!

  • @johnwalker1232
    @johnwalker1232 4 роки тому +5

    Сергей, сними пожалуйста видео про null, и почему его нельзя возвращать. Это сложная штука, которая с трудом поддается моему пониманию даже после десятка прочитанных статей на эту тему
    PS. И самое главное, что делать вместо этого. Как писать код без null

    • @user-zg8xo2yo4b
      @user-zg8xo2yo4b 4 роки тому +1

      Я читал, что вместо null нужно подставлять дефольтные классы-затычки, которые являются наследниками основного класса. Но лично у меня не всегда это получается.

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

      @@user-zg8xo2yo4b У меня так же. Потому что это не будет работать, если у тебя весь код в процедурном стиле (даже если ты думаешь, что пишешь на ооп). Чтобы это взлетело, нужно пересмотреть весь подход к проектированию. И вот уже на эту тему интересно было бы глянуть видос

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

      на c# я делаю функцию bool TryGetValue(out value) и горя не знаю. Если вернула false - значит, не удалось и в value по-любому null. По первым трем буквам сразу видно, что должно быть возвращено и не пропущена ли проверка условия

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

      Потому что автор не в курсе, что помимо Java/C++ существуют ещё, например, Swift и Haskell с такой магией как optional, реализованной на enum.

  • @user-ez2yf3yd3z
    @user-ez2yf3yd3z 2 роки тому

    OK!

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

    В примере про зеленые интерфейсы для юзера и админке. Как-то между собой стоит их соотносить? в виде наследования например?

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

      да по-любому придется, не дублировать же код

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

    SOLID уже обсосали все кому не лень, а вот знать хоть на пол шишечки больше чем SOLID пригодится на собеседовании да и в работе. Надо говорить об этих принципах просто обязательно! Очень ждём!

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

    love

  • @user-nu2jz1sb4s
    @user-nu2jz1sb4s 3 роки тому +1

    Пересматривал, возник чисто технический вопрос. Если у фасада в первом примере 10 методов, то потенциальное число комбинаций необходимых в методах его клиентов - огромное. Завтра может понадобиться написать класс, которому нужны 1, 3 и 10 метод, послезавтра поставят задачу, для который нужно написать класс с 1, 7 и 8 методом. И мы для каждого плодим интерфейсы? И мы меняем постоянно строчку implements? А как же Open/Close принцип тогда? Мы, фактически, хотя и меняем только строчку implements, мы меняем класс Facade под каждую такую задачу

    • @user-qc3tl5hj4h
      @user-qc3tl5hj4h 2 роки тому

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

    • @user-nu3ot7td1j
      @user-nu3ot7td1j 11 місяців тому

      Если так, то ведь просто создать 10 интерфейсов, и потом генерировать и совмещать как душе угодно. В этом и заключается данный принцип, изначально выстроить архитектуру проекта так, чтобы потом мы только работали на расширение. Тут просто видео совсем печальное

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

    Насколько показывает практика, следующий же change request от клиента нарушит весь этот хипстерский дизайн. По мере усложнения клиентам нужно будет все больше методов, и в конечном итоге все это сольётся в один большой интерфейс.

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

      "нужно больше методов!!!")))

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

    Что в Unity является клиентским кодом?

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

    6:29 когда нечаянно задеплоил в мастер ))

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

    Здравствуйте, помогите понять. Частичный интерфейс как-то должен быть связан с полным интерфейсом? может быть нужно создать частичный интерфейс(IP) потом отнаследоваться от него полному(IF)? не уверена что интерфейсы могут наследоваться...

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

      в Java могут :) А как это конкретно делать - возможны все перечисленные варианты. Какой правильный? зависит от вашего проекта

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

    Сергей, не понятно, если ваш класс DF реашизует полный интерфейс IF где есть метод a() и клиентский интерфейс IP где тоже метод a() есть, то тогда возникает конфликт, если DF два эти интерфейса попробует заюзать. (ваш пример на 8й минуте)

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

      Видимо, наследование нужно применить. Или разносить по двум разным интерфейсам и реализовывать их в одном классе на сервере

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

    Описание элементов SOLID звучит так как будто бы это можно автоматом детектить в IDE, есть ли на эту тему разработки/наработки?

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

      Это невозможно затетектить, логические косяки проектирования ни одна иде тебе не укажет

  • @user-nu3ot7td1j
    @user-nu3ot7td1j 11 місяців тому

    Я с утра вспомнила название первых трех, поняла, что четвертый и пятый не помню. Захожу в видео, а тут с листочка читают

  • @t3m4-98
    @t3m4-98 2 роки тому

    Сергей, может FoxMinded пора выпускать учебную литературу?)

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

    А вот если один класс использует 1 и 3 методы фасада, а второй класс использует 1 и 2 методы фасада. Дублировать эти методы в разных клиентских интерфейсах? Вроде как можно, потому что функциональность одна и метод в обоих интерфейсах будет в фасаде реализован. В случае если потребуется изменить контракт в одном из интерфейсах, то этот дублирующийся метод из этого интерфейса убирается, добавляется новый и он реализовывается в фасаде. Вроде норм. Но в самом фасаде создаются непонятки и не всегда ясно, что этот данный метод реализовывает два разных интерфейса.

  • @user-yv2vf7qh2u
    @user-yv2vf7qh2u 4 роки тому +1

    :)

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

    А как реализовать это на практике? Как от фасада взять нужные методы для интерфейсов? Забыть о фасаде и продублировать (копипастить) его методы в реализациях интерфейсов? И как вообще интерфейсы связаны с фасадом?

    • @user-wd4xu7sp2o
      @user-wd4xu7sp2o 4 роки тому

      Фасад в данном примере сам реализует интерфейс, ничего копипастить ненадо. Просто в описании класса (в данном случае - фасада) добавляется использование интерфейса/ов.

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

      Никак, забудь. Вся эта чушь пригодится только чтобы ответить на вопросы "синьоров" на собеседовании, больше пока что оно нигде не применимо.

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

    Что имеется виду под словом "клиент"?
    Я может в русском что не понимаю, но я знаю как минмум три значения этого слова и олно из них в програмировании можно интерпрерировать по разному.

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

    Все ясно і доступно. Але я не зрозумів як реалізувати це на чистому JS без typescript. В JS немає інтерфейсів. Хіба може можна створювати якийсь адаптер з потрібними методами. Але чи не буде це ускладненням коду?

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

      Все просто. Чистый JS - не ООП язык. То есть он слишком леворезьбовый, чтобы на нем можно было серьезно в архитектуру

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

    Интересно а стакан из под кофе на майке случайно бело-красно-белый?)

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

    8:07 почему не сделать ISelectable IInsertsble IUpdateable IDeleteable, и делать реализацию клиента путем множественной реализации интерфейсов?

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

      на каждый метод по интерфейсу?! Это жестко...

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

      @@maxlich9139 ну я же не зря сослался на время, речь у автора идет о частичной функциональности, предоставляемой клиенту. Разделить это по интерфейсам по сегментам ограничения, и имплементировать нужные интерфейсы в реализациях служб/клиентов будет более правильно..

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

      @@maxlich9139 хотя..

  • @mister-ace
    @mister-ace 2 роки тому +1

    Разве класс фасада это уже не нарушение srp?

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

    Чёрт, как ты узнал, что я пытался начать смотреть с 4 видео?

  • @dimitro.cardellini
    @dimitro.cardellini 3 роки тому

    Вот опять! Все было хорошо, пока речь не зашла о Фронт-Енде.
    .
    1) Есть взаимносовместимых подхода: API-First и Backend For Frontend. Так вот вопросы к фронтендерам типа "Дайте интерфейсы" -- это только для реализации BFF. Иначе "боль будет больная" для Всех. Рано или опоздно окажется, что фронт не может добавить новую функциональность потому, что бэк не поддерживает. А бэк не поддерживает потому, что фронт не заявил в требованиях. Ну давайте модель данных проектировать только по требованиям от Фронта. А чтобы зафейлиться поярче, давайте начнем с Mobile-First )
    .
    2) В принципе, спрашивать именно разработчиков о том, какие интерфейсы должны быть между фронтом и бэком (кстати, упомянутый в п. 1) BFF -- считается частью фронта), не есть хорошая затея. Дело в том, что это задача в некотором смысле обратна к задаче разработки, т.к. вместо того, чтобы получить спеку на вход, разработчик должен дать эту спеку на выходе (здесь главное не перепутать с документированием АПИ). Такое упражнение требует, и адекватной подготовки, и знания стратегии развития системы. Иными словами разработка интерфейсов между компонентами системы -- это задача архитектора (или человека, на которого возложены функции архитектора) или даже архитектурного коммитета.
    .
    3) и п.1) и п.2) ни в коем мере не нарушает правило: "Интерфейс принадлежит Клиенту". Просто у API потребителем может быть не только Фронтенд, а даже если только Фронтенд, то он может быть не единственным. В общем, чтобы начать идти "за интерфейсами" надо разобраться, кто есть Клиент этого АПИ. А до этого ... не надо "давать по голове" Фронтендерам, даже не смотря на то, что Немчинский разрешил.

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

    Теперь вопрос: почему в языке программирования не сделать механизм, чтобы в интерфейсе прописывать класс, который он представляет, а не в классе прописывать миллион implements? Или это где-то уже есть?

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

    Если фронтенденры не хотят четко запросить интерфейс дайте им GraphQL

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

      а я думал дать по голове лучше)))

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

    Можно увидить single method interface
    Разделяют настолько, что один и только один метод остается...причем называют его одинаково, чтобы реализации разные были.
    Позволяет решить проблему с перекомпиляцией всего приложения (если я правильно понял из видео как ведет себя джава), но в php это позволяет решить проблему создания не используемых объектов...
    Ведь если один метод, то все что пришло в конструктор ьудет использовано 100% и так по цепочке зависимостей.
    И упрощает тестирование...мокать один метод легко...если зависимостей более 13 то код воняет, нужно декомпозировать.

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

      Откуда вы такие беретесь?

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

      ​@@AlexanderPerechnev Вопрос с подвохом, не так ли?...

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

      @@grommaks вопрос риторический, не требующий ответа.

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

    Здравствуйте спасибо вам за все, что вы делаете. Хочу помочь вам, поэтому выскажу свое мнение (обычного пользователя) по поводу сайта foxminded, мне кажется он слишком нагруженным и плохо читаемым, т.е. если бы у меня не было точной цели обучаться и уважения к вам, я бы скорее всего не нажал на регистрацию и вообще закрыл сайт через минуты две. Возможно мое мнение предвзято, но оно основано на пользовательском опыте, я не разбираюсь в движках сайтов, но такой дизайн как у вас я видел очень большое количество раз, он не удобен пользователю, благо большинство ресурсов, постепенно, как мне кажется ещё в прошлом году начали уходить от этого, осмелюсь предположить, что ваш сайт на wordpress. У меня как у современного пользователя у которого явно выражена "рекламная слепота", сайты подобные вордпрессовским вызывают подобное чувство и даже некую злость. Так что рекомендую поменять дизайн сайта ну или хотя бы уменьшить количество текста, и протестировать на удобность на реальных пользователях - не знаю такая практика применяется или нет ...

  • @US-Air-Forces
    @US-Air-Forces Рік тому

    Получается если у меня в классе 48 методов, я должен создать 48 интерфейсов с разными методами? Не бред ли?

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

    А что значит замокана ? Метод замокан или бд замокана ?

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

      вроде как мок на интерфейс
      А что нам там будет делать внутри - это уже зависит от требований (но обычно ни в какие базы не лезет)

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

    байт на коменты защитан.Давай про SCRUM лучше и про управление людьми.

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

    можно ASID?

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

    А что насчёт того, что фасаду придётся наследовать овер9000 интерфейсов, некоторые из которых ещё и имеют одинаковые методы! Это ужас.
    Не, имхо но я такой пример не стал бы использовать. Фасад должен быть независим и быть на самой верхушке абстракций, а иначе у него будет ужасная здоровая сигнатура. Или же создать интерфейс для фасада из всех этих мелких интерфейсов, что конечно поможет, но плодить миллион таких фасадов не очень приятное занятие

    • @user-mu2yi2ri4n
      @user-mu2yi2ri4n Рік тому

      зато не нарушается принцип ISP ) получается что не домен определяет общий интерфейс, а каждый клиент определяет интерфейс по потребности. меня самого коробит от такого подхода

  • @user-rg9ev4cm5z
    @user-rg9ev4cm5z 4 роки тому +5

    Читать википедию на камеру с телефона это ж охренеть как позновательно.
    Хотя бы купи второй вайтборд или распечатай крупной гарнитурой и развесь за камерой

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

      Сделай лучше! Будем тебя смотреть, а не Немчинского.

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

      Определение мы и без Сергея в вики найдем, а вот обьяснить, так что люди поняли, это уметь нужно, для этого и смотрим.

    • @user-rg9ev4cm5z
      @user-rg9ev4cm5z 4 роки тому +2

      @@alekseykouzmenko9096 К сожалению, в IT кто умеет, тот работает. А кто не умеет тот учит других.

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

      @@user-rg9ev4cm5z пхаха, окей, иди работай)0

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

      ​@@user-rg9ev4cm5z Прискорбно

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

    Сергей, блог Дяди Боба переехал на blog.cleancoder.com

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

    по моему ISP какой то подозрительно простой, не правда ли?

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

      а они все простые. Просто здравый смысл

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

    Пошел к беку. Сказал, что я определяю интерфейс. Побили

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

    Интерфейсы должен определять и давать архитектор, а не клиент или сервер.

  • @user-co6te9dz4l
    @user-co6te9dz4l 4 роки тому

    Слышал такую фразу... "Принцип в принципе не принцип"

  • @user-xu5po3rk5t
    @user-xu5po3rk5t 3 роки тому

    Зачем на собесах спрашивают SOLID если в компании они не используются?

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

      Надеются найти того, кто начнет использовать)

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

    Уже не "...всё ещё"?)

  • @user-uv6xq7kj1z
    @user-uv6xq7kj1z 4 роки тому +1

    Собираем лайки на другие принципы

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

    Почему вы до сих пор на мак не перешли, вроде как все крутые прогеры на продукциях яблоки сидят ?)

  • @user-us5uf9tt8i
    @user-us5uf9tt8i 4 роки тому

    маркерную доску так и не купили😁...

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

      она маркерная, просто все принципы мы писали в один день :)

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

    пример 8:37 не валидный... ибо Общий и Частичный(или я не правильно понимаю ВАШЕ частичный) интерфейс ты не пронаследуешь, вы просто не понимаете принципа, либо ошиблись(хотя по мне Вы просто заговорились).. в том и прикол, что интерфейсы должны быть атомарными и не пересекаться.. к примеру в одном интерфейсе вся логика создания удаления, другой интерфейс поиск.. но не в коем случае ОБЪЕДИНЕНИЕ с ПОГЛОЩЕНИЕМ.. вы же сами нарушаете принцип и не замечаете, а уже ваш фасад пронаследуйте от этих 2 интерфейсов получив всю логику... на практике у вас клиент должен видеть классы в которых по необходимости реализованы комбинации из этих интерфейсов... разные классы с разным набором из атомарных интерфейсов, главное не переборщить и не довести что 1 метод = 1 интерфейс:)))) а то есть любители...

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

      Просто все эти абстрактные интерфейсы/протоколы были придуманы для решения вполне конкретных задач. "Синьоры" снова увидели в этом "универсальный ключ к решению всех проблем" и пытаются натянуть сову на глобус. Уже сам факт того, что сервис на этапе создания решает кто и как к нему будет обращаться - нарушает все остальные принципы этого же самого SOLID.

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

    Я изучаю пайтон и ничего не понял ( слишком джавовское объяснение

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

      Просто в более половины современных языков нет такого понятия как протокол.