Шаблоны разработки. шаблоны GRASP продолжение

แชร์
ฝัง
  • เผยแพร่เมื่อ 18 พ.ย. 2024

ความคิดเห็น • 48

  • @maxkomarow
    @maxkomarow 8 ปีที่แล้ว +21

    Прочитал несколько книг по ООП и только после просмотра лекций начал что-то понимать. Сергей, спасибо.

  • @Stalker-of6bn
    @Stalker-of6bn 3 ปีที่แล้ว +1

    Низкий Вам поклон, Сергей! Лучший анализ/обзор паттернов и принципов, которые я видел/читал/слышал от коллег.

  • @aleksandrignatov9328
    @aleksandrignatov9328 9 ปีที่แล้ว +5

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

  • @yabnku
    @yabnku 3 ปีที่แล้ว

    мне очень нравятся слайды проблема/решение, в которых в решении всегда написано: "ну, как-то так, чтобы это решало условия возникновения проблемы".
    спасибо, Сергей, за отличный материал. случайно наткнулся, а смотрю с большим удовольствием. если бы мне 15 лет назад преподавали ооп так, работал бы сео, наверное ).

  • @eugenelazurko8891
    @eugenelazurko8891 10 ปีที่แล้ว

    Сергей, спасибо огромное за лекции, полезнейшая штука для самообучения!

  • @eugenemartul872
    @eugenemartul872 8 ปีที่แล้ว +4

    Давно искал подобных разъяснений о том, а что я же все-таки делаю не так?) Возможно я один такой, но чтоб почувствовать необходимость в распределении обязанностей в приложении пришлось понабить шишек, и собственноручно слепить пару десятков "God object" и, таки, столкнуться с тем что переиспользовать код(или не дай бог сменить какую-нить библиотеку, когда ее использование, как вы говорили, равномерно размазано как г...) стало геморроем всей жизни). Жаль что я не смог понять этого раньше. Спасибо за видео. Успехов!

  • @SHURmandroid
    @SHURmandroid 10 ปีที่แล้ว

    Качество хорошее - уже прилично! :-)

  • @maksymskrynnikov3415
    @maksymskrynnikov3415 10 ปีที่แล้ว

    Огромное спасибо! Все доступно.

  • @asdffewfew
    @asdffewfew 4 ปีที่แล้ว +1

    я так и не понял,чем полиморфизм отличается от индерекшен...а в остальном все прекрасно разжевано. спасибо за контент)

    • @yabnku
      @yabnku 3 ปีที่แล้ว

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

  • @СергейДиденко-о8ю
    @СергейДиденко-о8ю 5 ปีที่แล้ว +2

    Замечательно все рассказано, однако про Indirection я немного выпал в осадок.. имелось в виду когда нам жизненно важен класс А, а если нам плевать на класс А, то тогда мы с таким же успехом интерфейс со своей новой реализацией, какой нам нужно будем использовать у себя в классе.. ну тут ладно, короче говоря полиморфизм, pure fabrication и indirection это по сути об одном и том же..
    благо в русском языке есть свои абстракции (называется "Эта фигня - та фигня") :
    в чем разница интерфейсов и абстрактных классов?
    - ни в чем нет разницы, все примерно одна фигня.
    что такое патерны?
    -чтобы эта фиговина не мешала другой фиговине, потомушо будет фигня.
    как всей это фигней пользоваться?
    -нафигачить кучу фигни для фиговин, и чтобы фигни и фиговин было не меньше, чем не нифига , но и не больше чем дофига
    короче, чтобы понять я начал записывать и рисовать)))
    спасибо за интересные мысли, самое интересное что именно к этой реализации я и приходил посоянно

  • @topalidinka
    @topalidinka 3 ปีที่แล้ว

    Сергей, спасибо за ваши лекции. Хочу спросить, я часто использую дто для удобства, как правильнее поступать чтобы не нарушать паттерны?

  • @HuKuTa944
    @HuKuTa944 3 ปีที่แล้ว

    Ну почему так мало вопросов в конце! У меня как раз вопрос про пример Indirection, где Сергей показывал пример Client и Server. Таймкод: 22:50
    Получается этому принципу следует паттерн "Порты и Адаптеры"? Интерфейс IServer является портом внутреннего слоя, где находится класс Client, а конкретные реализации этого интерфейса внешними адаптерами?
    Еще вопрос, в каком пакете располагать класс Client и IServer, и в каком конкретные реализации интерфейса IServer?
    Из гексагональной архитектуры вычитал, что Client и IServer (порт) следует располагать в Domain слое т.к. это основная бизнес логика, а уже конкретные реализации интерфейса IServer (адаптеры) во внешних слоях?
    Нет никаких трудностей в написании классов и функционала приложения так сказать в лоб, а вот как это все архитектурно грамотно расположить и распределить... вот это очень интересная задача! Не смотря на дату видео, буду надеяться на получение ответа :-)
    Смотрю этот курс лекций и попутно рефакторю свой простенький учебный проект. Очень много нового и полезного узнаю в каждом видео! Хотел бы в живую присутствовать на лекции :-)

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 2 ปีที่แล้ว

    Спасибо

  • @MersedessBens
    @MersedessBens 3 ปีที่แล้ว

    Пример который шел с полиморфизмом. Мне как-то на суппорт дали код с linq2sql (это было лет 10-12 назад). Все эти автоматически генеренные классы были раскиданы по всему коду. Эта вся срань дала проблемы с производительностью и пришлось менять страницы!!! (Asp.net web-forms)
    Яркий пример почему надо все таки оборачивать эти фреймворки по обращению к БД. И вообще, я в них вижу мало пользы, по правде. У многих из них проблемы с производительностью, да и чем плох SQL, его понимают все. Переключение разных БД (SQL server, oracle, etc) то конечно такое, не часто встречается.

  • @404animator
    @404animator 10 ปีที่แล้ว

    уррррааааа - новые видео

  • @lichlichi
    @lichlichi 6 ปีที่แล้ว

    Мини-дискуссию-разъяснение на 21:00 можно было ли объяснить тем,что первоначальный класс (B) ведёт за собой цепочку огромного количества обращений к другим классам(не видимых за кадром, так сказать), а Петькин класс (B1) уже не будет это делать? Или это не имеет разницы?

  • @ДмитроМартинов-о8з
    @ДмитроМартинов-о8з 4 ปีที่แล้ว

    9 весомых причин использовать интерфейсы)

  • @xsaret9875
    @xsaret9875 5 ปีที่แล้ว +1

    Может конечно не очень удачный пример, но как я поняла это имеется ввиду под принципом чистой искуственности. Допустим проходит какая-то хим реакция и чтобы ее описать надо решить не линейную систему уравнений, нам с точки зрения реакции интересен только выход по продуктам и тепло, а как мы считаем в общем-то пофигу. В другой реакции нам опять нужен расчет системы, но часный случай, и тп. Так почему бы не создать класс математика, который соберет в себе чисто решение систем уравнений. Он на прямую вообще не знает о нашей предметной области, и интуитивно к ней не относится => является искусственным(обслуживающим)

  • @aslan1504
    @aslan1504 7 ปีที่แล้ว

    Я бы перевел Protected Variations как "Безопасное изменение".

  • @mo0lo0ko0
    @mo0lo0ko0 4 ปีที่แล้ว

    Pure Fabrication, это Repository в DDD? 🤔

  • @ИванИванов-в7е3у
    @ИванИванов-в7е3у 8 ปีที่แล้ว +1

    Для тех кому интересно почитать подробнее про Гексагональную архитектуру (habrahabr.ru/post/267125/), правда привязка к PHP, которую сформулировал Алистер Коберн (en.wikipedia.org/wiki/Alistair_Cockburn) на своем сайте (alistair.cockburn.us/Hexagonal+architecture), и из поста на хабре в комментах на английском интересный доклад Mathias Verraes (th-cam.com/video/ZJ63ltuwMaE/w-d-xo.html) по организации всесторонней защиты бизнес-логики (правда тоже с привязкой к PHP) + реализованный по этому принципу проект (github.com/norzechowicz/mydrinks)

    • @ИванИванов-в7е3у
      @ИванИванов-в7е3у 8 ปีที่แล้ว

      +Иван Иванов Несмотря на то, что архитектура называется гексагональной, что должно указывать на фигуру с определенным количеством граней, основной мыслью все же является то, что граней у этой фигуры много. Каждая грань представляет собой «порт» доступа к нашему приложению или же его связь с внешним миром.

  • @evgix
    @evgix 9 ปีที่แล้ว +8

    У меня немного каша.
    Маленькие объекты это хорошо, хорошо дробить по каждой логике на мелкие части (до разумного конечно), но при этом, дробя, мы тут же создаем большее число зависимостей (которые будут инклудится в класс), то есть следуя одному мы нарушаем другое (интересно получается).
    Значит надо сделать промежуточный класс, чтобы собрать некоторые классы в группу?? Ну мы же только что для этого раздробили. Бесконечный цикл. И не факт что это группа будет правильной (по смыслу да, по использованию нет).
    Конечно как ответ может быть то, что следует текущий класс разбить так же на мелкие части, но извините, так абстрагироваться (упрощать систему) не получиться.
    В общем это напоминает перетягивание одеяла (например та же ситуация с DI , тут нам говорят внутри создавай объект где он требуется, и тут же внедрение зависимостей решение всех бед, создавай объекты и решай зависимости в одном месте).
    Я понимаю слова автора о том, что паттерны не панацея и нужно думать, но советы, которые противоречат друг другу при первом же углубление - это уже не наука, а догма. Я так же могу создавать такие абстрактные паттерны - "ешь витамины в меру, мало витаминов - недостаточно. Много - плохо. Поэтому ешь в меру!!!" (Круто да? А разве я не прав? И получается, тот кто согласен, возрадует мой паттерн, а тот кто поймет, что его на...ли будет его осуждать, вива холивар!)
    В теории программирования явно имеются проблемы и эти проблемы в программистах, которые занимаются теорией больше чем практикой, печатая конвейерном книги о правильном коде. :)

    • @ЦарьковВиталий-323
      @ЦарьковВиталий-323 9 ปีที่แล้ว

      +Sergey Nemchinsky
      Хороший вопрос от Евгения Гикс. Прямо картинка со связями от которой мы раньше(на этапе информ. эксперта) избавлялись вырисовалась в конце 1 занятия по GRASP, когда речь шла о мелких классах.
      Хотелось бы все же знать ответ, потому что проблема сформулирована, а вот задача "не формализуема", как ответил автор. Что значит "вручную - более чем исполнима" и почему не получается это озвучить.
      Спасибо.

    • @ЦарьковВиталий-323
      @ЦарьковВиталий-323 9 ปีที่แล้ว +2

      +Sergey Nemchinsky
      Спасибо за ответ.

  • @eugenelazurko8891
    @eugenelazurko8891 10 ปีที่แล้ว

    Вот только маркер посвежее бы..)) ничего не видно

  • @ВикторГиль-ф2ф
    @ВикторГиль-ф2ф 9 ปีที่แล้ว

    Трудно согласиться, что полиморфизм упрощает программу. Наоборот имхо. Просто if из программы переносится на проверку уже во время runtime. Более того, if проверяется во время компиляции и выдаст ошибку до выполнения (я не защищаю множество вложенных if). В случае полиморфизма ошибка может выползти у клиента, при попытке создать класс, интерфейс которого устарел из за разных jar-файлов.
    Ну и вызвать метод на другом хосте можно. Для этого есть Remote Method Invocation или CORBA.

    • @IMMLF
      @IMMLF 8 ปีที่แล้ว +2

      +Виктор Гиль да нет, не трудно. Лопатить код бизнес логики для того чтобы добавлять\модифицировать функционал гораздо сложнее (где эти зависимости? Что они должны были делать 6 лет тому назад, когда этот код писался?), нежели подменить какую-то формализованую рализацию зависимости за фасадом.

    • @ВикторГиль-ф2ф
      @ВикторГиль-ф2ф 8 ปีที่แล้ว

      IMMLF Если бы вы когда нибудь работали программистом, то никогда бы не согласились переписывать бизнес логику. Потому что не пойманная вовремя ошибка в бизнес логике, означает убытки в сотни миллионов. Если бы вы были настоящим программистом, то знали, что для полной проверки логики, надо 2 в степени количества if в программе. А при 32 if это уже 4294967296 тестовых последовательности. И люди столько не живут, чтобы это проверить. И после этого вы утверждаете что легко перепишите бизнес логику, которая проверялась годами? Вас гнать надо, подальше от программирования имхо.

    • @IMMLF
      @IMMLF 8 ปีที่แล้ว +1

      +Виктор Гиль вы не поняли то, что я написал, но поспешили кричать, что меня надо гнать подальше от программирования. Успокойтесь и прочитайте мой комментарий еще раз. Желательно вслух.

    • @ВикторГиль-ф2ф
      @ВикторГиль-ф2ф 8 ปีที่แล้ว

      IMMLF Если я ответил на ваш комментарий, значит читать умею. Потрудитесь тогда объяснить, что же вы имели ввиду?

    • @IMMLF
      @IMMLF 8 ปีที่แล้ว

      +Виктор Гиль Я имел в виду, что полиморфизм (как и принцип, так и паттерн) на архитектурном уровне таки упрощает построение программ (систем). Мне с этим легко согласится, а не трудно.

  • @Ajax222able
    @Ajax222able 3 ปีที่แล้ว +1

    Омг, что там за крестьяне на лекции сидят

  • @SHURmandroid
    @SHURmandroid 10 ปีที่แล้ว

    Качество хорошее - уже прилично! :-)