Принцип подстановки Барбары Лисков || The Liskov substitution principle

Поделиться
HTML-код
  • Опубликовано: 24 ноя 2024

Комментарии • 123

  • @Kirshach
    @Kirshach 3 года назад +39

    У тебя лучшее объяснение принципов SOLID что я видел) спасибо

    • @it-sin9k
      @it-sin9k  3 года назад +1

      Спасибо за такую высокую оценку!)

    • @krumbo
      @krumbo 2 года назад

      200%, I have never seen someone explains SOLID at front end so well

    • @Epenckorn
      @Epenckorn 8 месяцев назад

      Немчинского посмотри. А это - дичь какая-то.

  • @LRXAORLOV
    @LRXAORLOV 4 года назад +37

    Одно из простых объяснений что я слышал) спасибо :)

    • @sawyerreign6628
      @sawyerreign6628 3 года назад

      I know Im randomly asking but does someone know of a trick to log back into an Instagram account..?
      I was dumb forgot the account password. I would love any assistance you can offer me.

    • @sawyerreign6628
      @sawyerreign6628 3 года назад

      @Pedro Leonard I really appreciate your reply. I got to the site through google and Im in the hacking process now.
      Looks like it's gonna take a while so I will reply here later with my results.

    • @sawyerreign6628
      @sawyerreign6628 3 года назад

      @Pedro Leonard It worked and I finally got access to my account again. I'm so happy:D
      Thanks so much, you really help me out :D

    • @pedroleonard2007
      @pedroleonard2007 3 года назад

      @Sawyer Reign No problem :)

  • @spadar1602
    @spadar1602 3 года назад +4

    Ты просто открытие, обязательно порекомендую твой канал в ld

    • @it-sin9k
      @it-sin9k  3 года назад

      Спасибо!)

  • @alexdubkov6998
    @alexdubkov6998 2 месяца назад

    Отлично объясняешь - у тебя, прям, талант! Это всё здорово в синтетическом примере, когда мы считаем задним умом. А по факту может быть кнопка с динамическим бекграундом и анимацией, и снова проблема - куда вставлять изменения (а там ещё принцип Single Responsibility). И иногда идея чистого наследования начинает проигрывать ad hoc. А иногда проще сделать отдельные сущности - так и связанность меньше, и зависимостей нет никаких.
    Просто стоит помнить, что любой принцип может не подходить для текущей задачи. Иначе можно явно нарваться на Фабрику Фабрик и Fizzbuzz enterprise edition

  • @АлексейЛоскутников-ю4р

    Спасибо. Одно из самых понятных объяснений этого не простого принципа.

  • @bizuha
    @bizuha Год назад

    Очень интересное и подробное объяснение. Большое спасибо за проделанный труд!

  • @lomeat
    @lomeat 3 года назад +12

    оо, был такой опыт на проекте.
    Буквально была кнопка и я как хороший программист, пытался учесть все возможные способы ее использования, от чего пропсы кнопки дико росли с каждой последующей версткой новых компонентов. А потом пришел лид и сказал "убери это нахер и делай отдельные компоненты таких кнопок". Я тогда послушался, но не понял смысла такого сокращения. В целом там это и было не так реализовано, как тут в видео и уже сейчас я ясно представил, как это все еще можно было упростить и улучшить. Но я только сейчас понял, как важно понимать все принципы.
    Ну еще важно обьяснять почему надо делать, а не так. Если бы он мне сразу тогда донес свою мысль, то мне не пришлось бы узнавать случайно прямо сейчас.

    • @it-sin9k
      @it-sin9k  3 года назад +17

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

    • @romanmed9035
      @romanmed9035 2 года назад +1

      @@it-sin9k зато Вас интересно слушать и подача материала все же необычная. потому и смотрю Ваши выпуски (и не только их конечно), когда необходимо на что-то отвлечься.

    • @it-sin9k
      @it-sin9k  2 года назад +1

      @@romanmed9035 Спасибо!

  • @АртемийКолотов-з4ь
    @АртемийКолотов-з4ь 2 года назад +1

    Спасибо за Ваши труды! Наверное самое для меня интересное в фронтенде- применять паттерны проектирования, принципы ООП
    Контент мега полезный!

  • @dmitry4337
    @dmitry4337 2 года назад +1

    Не очень то и гибкий подход. Вы унаследовали DefaultIconButtonWithBadge от DefaultIconButton. Но что, если в будущем и у CallIconButton появится badge? Придется создавать еще один дочерний класс. На практике это все может перерасти в кучу параллельных иерархий с дублирующимся кодом. А в остальном видео - огонь, очень доходчиво объясняете.

  • @dimitro.cardellini
    @dimitro.cardellini 2 года назад

    А вот здесь хорошо! Даже отлично. Очень правильно было отойти от привязки к наследованию классов.
    Здесь яркий пример создания под-типов без классов и без наследования.

  • @turuturuururur8691
    @turuturuururur8691 2 года назад +1

    Учу java, данное видео дало понять данный принцип, даже учитывая, что примеры из совсем другой области

  • @andreyshevchenko4602
    @andreyshevchenko4602 3 года назад +8

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

    • @it-sin9k
      @it-sin9k  3 года назад

      Спасибо! Лучшая благодарность для нашего канала, это поделиться этим видео с коллегами

  • @yuragrivicki5272
    @yuragrivicki5272 3 года назад

    Лучшее объяснение, ты крут!!! И для Ютубчика SOLID - principle of Barbara Liskov.

  • @АлександрБадаландабад

    Отличное объяснение ! Апплодисменты !

    • @it-sin9k
      @it-sin9k  3 года назад

      Спасибо!)

  • @xD-hu3gw
    @xD-hu3gw 3 года назад +1

    звучит все так просто ) как слышу меняем дизайны всех кнопок - у меня глаз дергается )

    • @it-sin9k
      @it-sin9k  3 года назад +1

      ахах) нужна практика) как за рулем)

  • @AvtandilSh
    @AvtandilSh 3 года назад

    Присоединяюсь к предедущим комментам. Одно из простейщих обяснении, да еще и с анимашками )))

    • @it-sin9k
      @it-sin9k  3 года назад

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

  • @Kurama.00
    @Kurama.00 2 года назад

    Я как бэкендщик (будущий) смотрю этот видос, и меня аж трясёт (мем с пёсиком: мхм-мхм, кнопочка должна теперь выводить циферки)
    Но видос полезный, ведь принцип работает одинаково и там, и там

  • @dgtlist
    @dgtlist 2 года назад +1

    Огромное спасибо за инфо. Помогает мне подобрать принцип сборки дизайн-системы в Figma

  • @apanchuk
    @apanchuk 3 года назад +2

    Спасибо. Подобный подход в построение UIKit обдумываю уже какое-то время.

    • @it-sin9k
      @it-sin9k  3 года назад

      мы рады быть полезными)

  • @TheTexPro
    @TheTexPro Год назад

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

  • @pavell53
    @pavell53 3 года назад +1

    Очень круто. Примеры приближенные к реальности. JS + верстка, а не тупо на JS принципы объяснены.

    • @it-sin9k
      @it-sin9k  3 года назад +1

      именно такую идею при создании видео я и пытался передать) я рад, что получилось)

  • @imvasia13
    @imvasia13 3 года назад

    Вероятно, самое лучше объяснениє, которое я слышал :)
    Спасибо!

    • @it-sin9k
      @it-sin9k  3 года назад

      высокая похвала! спасибо!)

  • @snatvb
    @snatvb 2 года назад

    пример с наследованием кнопок идейно крут, но только для этого лучшего всего подойдет не наследование, а порождающие паттерны, например декоратор, а так же композиция
    таким образом ты делаешь "декоратор" - компонент обертку, Button, который выступает просто оберткой и получает children, потом ты делаешь кучу иконок и все такое, потом делаешь компонент "декоратор" WithBadge - который добавляет обертку твоему children и устанавливает бейджик в правом верхнем углу, теперь ты можешь это комбинировать - делать композицию:
    чем это лучше? завтра приходит дизайнер и говорит, что мне бы бейджик добавить для тэга, или аватарки пользователя, а ты просто берешь и оборачиваешь :)
    Composition > Extends

    • @it-sin9k
      @it-sin9k  2 года назад +1

      Декоратор всегда побеждает у наследования :)

  • @zizzxiii2714
    @zizzxiii2714 3 года назад

    Наконец-то я понял. Спасибо ! Все понятно!

    • @it-sin9k
      @it-sin9k  3 года назад

      Всегда пожалуйста ;-) Приходите еще)

  • @sergey_llal6897
    @sergey_llal6897 2 года назад

    спасибо за прекрасную подачу

  • @AndriyEismond
    @AndriyEismond 4 года назад +1

    Привет. Круто! Отличное объяснение!

    • @it-sin9k
      @it-sin9k  4 года назад

      Привет) Спасибо за фидбек!

  • @ГеоргийРукомин
    @ГеоргийРукомин 3 года назад

    Спасибо за урок!

  • @GagikHarutyunyan_dev
    @GagikHarutyunyan_dev 3 года назад +1

    По этому и CSS это CSS (Cascading Style Sheets), на наследовании весь CSS, и до css in js или модулей нужно было писать так чтобы не конфликтовали и плюс расширялись. Спасибо за урок

  • @NoName-zh7cc
    @NoName-zh7cc 3 года назад

    The best!

  • @serheliusperchuk5298
    @serheliusperchuk5298 3 года назад

    Меня направили на этот канал на собеседовании. Вижу что не зря сходил на это собеседование))))

    • @it-sin9k
      @it-sin9k  3 года назад

      ничего себе)) а в каком городе нас так рекламируют?)

    • @serheliusperchuk5298
      @serheliusperchuk5298 3 года назад

      ​@@it-sin9k Одна компания в Черновцах)

    • @it-sin9k
      @it-sin9k  3 года назад

      круто!) расширяем нашу географию)

  • @daryashashko6688
    @daryashashko6688 3 года назад

    прям мега!!
    Спасибо!

    • @it-sin9k
      @it-sin9k  3 года назад

      не за что)

  • @yuriiyurii6656
    @yuriiyurii6656 3 года назад

    Супер

  • @dmitrykorovin4356
    @dmitrykorovin4356 2 года назад

    супер классно, спасибо

  • @igor_cojocaru
    @igor_cojocaru 3 года назад

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

    • @it-sin9k
      @it-sin9k  3 года назад

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

    • @igor_cojocaru
      @igor_cojocaru 3 года назад

      @@it-sin9k Очень хочется поделиться с коллегами, но к моему сожалению они не знают русского языка.

    • @it-sin9k
      @it-sin9k  3 года назад +1

      мы начинали английскую версию, там даже приличное кол-во видео запаблишено)
      но из-за недостаточного английского и свободного времени, пришлось поставить на паузу, пока бюджет на это дело не появится) Пока вот пару видео можете пошарить коллегам)
      ruclips.net/video/CICzqtQhL7U/видео.html

    • @igor_cojocaru
      @igor_cojocaru 3 года назад

      @@it-sin9k Спасибо! Круто что про Reconciliation есть на английском. Будем объяснять почему key важно делать уникальным. И вообще что там под капотом 👍🏻

    • @it-sin9k
      @it-sin9k  3 года назад +1

      будем стараться по быстрее воскресить английскую версию)))
      но пока сил на нее нехватает)

  • @mykhailostepanishchev6472
    @mykhailostepanishchev6472 3 года назад

    крутой видос,спс !

  • @ilyakushlianski6519
    @ilyakushlianski6519 4 года назад +2

    Композиция компонентов или render props были бы даже лучшим вариантом, чем DefaultIconButtonWithBadge. Тут видится вообще 3 компонента: кнопка, внутренняя иконка и бэдж

    • @it-sin9k
      @it-sin9k  4 года назад

      Ага) разгонять можно сильно) в зависимости от нужд проекта)

  • @dm.hol.3624
    @dm.hol.3624 3 года назад

    Год не работал, смотрю перед серией собесов. Если поможет, подпишусь на донаты. Ну а пока лукас + коммент.

    • @it-sin9k
      @it-sin9k  3 года назад +1

      Перед собесами, лучше посмотреть тогда про React плейлист и доклад про React)
      Ждем и надеемся на донаты :D

  • @vladimirrusov7842
    @vladimirrusov7842 Год назад

    Очень интересно) Для добавления budge лучше сделать без создания новой кнопки, в просто добавлять кнопку в качестве children при использовании budge компонента?

    • @it-sin9k
      @it-sin9k  Год назад

      в данной ситуации наверное да)

  • @krumbo
    @krumbo 2 года назад

    Thanks!

    • @it-sin9k
      @it-sin9k  2 года назад

      Первое супер спасибо! Низкий поклон!!!

  • @spoonjeee4785
    @spoonjeee4785 4 года назад

    Спасибо, полезно

  • @БатырбекАйгалиев
    @БатырбекАйгалиев 4 года назад +8

    Спасибо за видео! Вечно забываю смысл этого принципа из-за не очень говорящего названия) Получается, если следовать этому принципу, то базовая уточка не должна уметь летать? Или механической утки не должно существовать?

    • @it-sin9k
      @it-sin9k  4 года назад +4

      Оба варианта работают. Если базовая утка перестанет уметь летать, то принцип не будет нарушаться. Либо механическая утка не будет наследоваться от базовой утки.

    • @it-sin9k
      @it-sin9k  4 года назад +3

      Мне кажется, нам тяжело его запомнить, т.к. мы его не используем во фронтенде. Это на первый взгляд кажется вообще невозможным :)

  • @Xeon83
    @Xeon83 3 года назад

    Очередной годный контент! Очередной лайк Синяку! А ты реально пишешь на голом is, не на typescript даже?

    • @it-sin9k
      @it-sin9k  3 года назад

      Как какой проект, текущий на TS, предыдущие 2 были на JS.

  • @IFlexxx
    @IFlexxx Год назад

    А чем эта эпопея с кнопками отличается от обычного наследования?

  • @dididie158
    @dididie158 2 года назад

    Не совсем понял как размеры прокидываются, через IconButton или отдельно CallIconButton и отдельно defaultIconButton?

  • @bogdankarpus181
    @bogdankarpus181 2 года назад

    описание идеи вроде ясно, но с реализацией остались вопросыю ведь помимо чисто стилевых изменений у наследников появляются и логические изменения, и даже разметка меняется.
    Да и такое дерево наследия, всё таки выглядит в реальных проектах более монструозно, и противоречит некоторым рекомендациям избегать наследования в пользу композиции.

    • @it-sin9k
      @it-sin9k  2 года назад +1

      На самом деле, то что обсуждается в этом видео, это скорее ближе к композиции чем к наследованию. Есть еще одно видео, в котором я использовал похожий подход, чтобы разложить попапы по полочкам)
      ruclips.net/video/20ZVV5ujkFw/видео.html

  • @romanmed9035
    @romanmed9035 2 года назад

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

    • @it-sin9k
      @it-sin9k  2 года назад

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

    • @romanmed9035
      @romanmed9035 2 года назад

      @@it-sin9k спасибо, да заметно что все же не для нулевого уровня и это радует. ибо как устновить ноду и кра несколько десятков вариантов.

  • @qwe-rty-
    @qwe-rty- 2 года назад +1

    Так как реакт продвигает композицию вместо наследования, то это все у нас будут просто разные компоненты, так ведь? (Возможно только с общим файлом стилей, но разными .tsx файлами🤔)

    • @it-sin9k
      @it-sin9k  2 года назад

      Да, конечно это разные tsx файлы. Более подробно я разбирал как это может выглядеть на примере попапов в этом видео. Идея примерно такая же:
      ruclips.net/video/20ZVV5ujkFw/видео.html

  • @makeoverweb2663
    @makeoverweb2663 3 года назад +1

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

    • @it-sin9k
      @it-sin9k  3 года назад +5

      Я обычно действую очень ситуативно. Например, если те же кнопки выглядят совершенно по разному, я бы разнес это просто в разные компоненты. Если же мы хотим просто добавить существующей кнопке, например состояние isActive (у самой кнопки физически такого состояния нет). Я возможно создал бы еще один компонент, который в return будет возвращать первоначальную кнопку и передал бы className ему что то типа такого classNames({ [styles.active]: isActive }). Таким образом кому нужна кнопка с активным состояние использовал бы эту кнопку, а кому состояние такое не нужно использовал бы базовую кнопку

    • @makeoverweb2663
      @makeoverweb2663 3 года назад +1

      @@it-sin9k неплохой вариант, спасибо за совет мистер Синяк)

  • @Mirba_
    @Mirba_ 3 года назад

    у меня такой вопрос,
    допустим у нас есть базовая кнопка: IconButton со своими стилями из ../UiKit/IconButton/style.css
    затем у нас появилась необходимость в новой кнопке: CallIconButton, и для этого мы создаем еще компонент CallIconButton куда подключаем стили из ../UiKit/CallIconButton/style.css, то есть каждый раз при необходимости мы создаем новый компонент с новыми стилями?
    я правильно понял?

    • @it-sin9k
      @it-sin9k  3 года назад

      Смотря в какой ситуации. Если вы хотите расширить функционал текущей кнопки, то создаете новую и дописываете ей нужные стили только.
      Есть еще один пример с попапами, где я делал по такому же принципу, может станет немного понятнее:
      ruclips.net/video/20ZVV5ujkFw/видео.html

  • @apanchuk
    @apanchuk 3 года назад

    А как быть с изменениями в базовый компонент IconButton?
    Стараться не вносить изменения, а расширять его (знакомый принцип)?
    Ведь иначе придется проверять всех остальных потомков.
    Возможно тут будет полезно скриншот-тестирование.
    Сорри, если я пропустил ответ в видео)

    • @it-sin9k
      @it-sin9k  3 года назад +2

      идея таких подходов заключается в том, что чем ближе компонент к базовому, тем реже он должен изменяться. Если так не получается, вероятно либо у вас короткое дерево насследования, либо составлено не совсем удачно наследование.
      И конечно же скриншотное тестирование избавит вас от пробрем с регрессией. Однозначно рекомендую

  • @cikada3398
    @cikada3398 2 года назад

    Как быть с функциональными компонентами?
    Выносить логику в кастомные хуки? и дергать их у наследников?)

    • @it-sin9k
      @it-sin9k  2 года назад

      конкретно в данном кейсе, я рассматривал ui-kit. У ui-kit вроде как не должно быть логики

  • @Quentinrei
    @Quentinrei Год назад

    👋👋👋👋

  • @maksimmaksimenko3504
    @maksimmaksimenko3504 3 года назад

    Доброй ночи, можете объяснить что значит наследовать от базовой кнопки?
    Не могу понять как это происходит на практике.
    За ранее благодарю.

    • @it-sin9k
      @it-sin9k  3 года назад +1

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

    • @maksimmaksimenko3504
      @maksimmaksimenko3504 3 года назад

      @@it-sin9k понял Вас, спасибо большое за ответ и за видео которые Вы делаете

  • @ruslanaskarov5393
    @ruslanaskarov5393 3 года назад +2

    не совсем понятно как расширять базовую кнопку

    • @banderlogUA
      @banderlogUA Год назад

      Создаём обычную кнопку с минимальным набором стилей и пропсов, для расширения оставляем две вещи: динамический класс и контент кнопки как children, для кнопки с иконкой мы прокидываем иконку в children, и если нужно красить то прокидываем модифицирующий класс

  • @LRXAORLOV
    @LRXAORLOV 4 года назад +1

    Да и где поддержать можно )?

    • @it-sin9k
      @it-sin9k  4 года назад +4

      мы пока еще не рассматривали варианты для пожертвований)
      но для нас особое значение имеет то, что наш контент вызывает желание поддержать проект!)
      Это вероятно лучшая похвала)
      Спасибо!)

    • @LRXAORLOV
      @LRXAORLOV 4 года назад +1

      Если будете выбирать посмотрите buymeacoffee) а то у patreon большие проценты) Рубрика незваные советы ;)

    • @it-sin9k
      @it-sin9k  4 года назад +1

      Спасибо за совет) о таком не знал даже) будем изучать вопрос)

    • @it-sin9k
      @it-sin9k  4 года назад +3

      Привет) мы прислушались к твоему вопросу и создали целых 2 площадки для поддержки проекта, возможно разным людям в разных местах удобнее поддерживать) Если еще есть советы по тому как мы оформили или выставили настройки дай знать)
      Поддержать проект можно здесь:
      Patreon: www.patreon.com/ITSin9k
      BuyMeACoffee: www.buymeacoffee.com/XcBPY5W

  • @КириллЧе-я5ы
    @КириллЧе-я5ы 10 месяцев назад

    Механическая утка должна наследовать миксином от утки и какого либо механизма, лучше через интерфейсы, поведение частично берётся от утки, частично от механизма… а просто наследование от утки некорректно, именно поэтому лис и нарушается

  • @pavel.karpets
    @pavel.karpets 2 года назад

    Но ведь изначально не использовалось вообще никакого наследования. Т.е принцип не нарушался - его просто негде было применить. Потом автор внедрил наследование сразу с применением LSP. По-моему не очень показательно.
    ps: а вот пример с утками зачётный

  • @АндрейКругликов-у1н

    механическая? я думал это утка зомбарь

    • @it-sin9k
      @it-sin9k  2 года назад

      ахаха) я как раз смотрел в те времена "живые мертвецы" или как он там называется))

  • @VladimirS.-sk5kh
    @VladimirS.-sk5kh 5 месяцев назад

    Да неужели хоть кто-то нормально объяснил!

  • @eugenebores
    @eugenebores 2 года назад

    По-моему принцип подстановки Барбары Лисков тут притянут за уши. Я его понимаю как наследуемый класс не должен расширять интерфейс, а только менять поведение базового интерфейса, чтобы можно было указывать в аргументах базовый класс или интерфейс. В приведённом примере и близко нет такого требования, везде используется конкретная имплементация. В итоге получили несколько параллельных иерархий: обычные иконки, иконки с бэджами и иконки для звонков -- а дальше все остальные комбинации. Это очень плохое решение, сам обжигался на нём несколько раз. Лучше иметь иерархию новых признаков, чем несколько иерархий с признаками (см. паттерн мост).

    • @it-sin9k
      @it-sin9k  2 года назад

      Хмм, я вот перечитал несколько раз. Возможно я ошибался в понимании этого принципа. Попробую на свежую голову почитать побольше :) Спасибо за комментарий!

  • @Epenckorn
    @Epenckorn 8 месяцев назад

    Я, конечно, не претендую на истину в последней инстанции, но возьму на себя смелость высказать конструктивную критику.
    Во-первых, краткая формулировка принципа подстановки от Роберта Мартина на человеческом языке - "функции, использующие базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом".
    Во-вторых, этот принцип описывает правильный полиморфизм, а не правильное наследование.
    В-третьих, лично я вообще против этого принципа, так как он ломает напрочь саму основу ООП. И я не могу придумать ситуацию, когда может понадобится внезапно подставлять подкласс туда, где изначально был родительский класс. Если вам внезапно в объекте родительского класса понадобился метод одного из его наследников, значит у вас что-то не так с архитектурой приложения.
    В-четвёртых, проблема с появлением кнопки с количеством пользователей решалась добавлением 2 свойств, которые нужно было предусмотреть ещё на этапе добавления свойства theme, а именно добавить свойство css_class вместо theme и content вместо badge, а в них уже в виде объектов хранить и тему и тип контента (bagde/numbers/emoji) и сам контент.
    В-пятых, на кнопках звонка badge тоже нужен. Как ты дашь понять пользователю, что его микрофон выключен или за(mute)н или камера не определяется или поставлена на паузу?
    В-шестых, в качестве цветовой темы правильнее и логичнее использовать переменные css, а не свойства в коде js.
    В-седьмых, обнуление css-свойств для класса - это, конечно, ни разу не нарушает принцип reuse, да... размещение шрифтовой иконки в виде тега вместо псевдоэлемента before с абсолютным позиционированием - это, конечно, сильно... Но спишем это всё на демонстрационный пример.
    Дальше я уже окончательно перестал понимать, что происходит на экране и кто все эти Button. Резюмирую.
    Мне больно смотреть, как люди надрачивают на одну из букв твердотельника с сомнительной полезностью, при этом просирая наглухо принципы DRY, разделения ответственности между представлением и логикой, здравого смысла и юзабельности собственного инструмента.

  • @username8836
    @username8836 3 года назад

    Просто прочитай 2 принцип солид. и все

  • @Вбелом-й3з
    @Вбелом-й3з 2 года назад

    isDisabled?! ты че серьезно?

  • @johnins1646
    @johnins1646 2 года назад

    Объяснение не корректное, по сути вы привели пример наследования. ЛСП говорит о нарушении контракта.

  • @username8836
    @username8836 3 года назад

    Автор явно не читал 2 принцип солид

  • @crypto_has_you
    @crypto_has_you Месяц назад

    Двоешник, или учись. Этот принцип про типы,а не про наследование классов