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

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

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

  • @maxkomarow
    @maxkomarow 8 лет назад +21

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

  • @Stalker-of6bn
    @Stalker-of6bn 3 года назад +1

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

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

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

  • @aleksandrignatov9328
    @aleksandrignatov9328 9 лет назад +5

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

  • @eugenelazurko8891
    @eugenelazurko8891 10 лет назад

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

  • @eugenemartul872
    @eugenemartul872 8 лет назад +4

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

  • @maksymskrynnikov3415
    @maksymskrynnikov3415 10 лет назад

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

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil Год назад

    Спасибо

  • @SHURmandroid
    @SHURmandroid 10 лет назад

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

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

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

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

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

  • @СергейДиденко-о8ю
    @СергейДиденко-о8ю 5 лет назад +2

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

  • @404animator
    @404animator 10 лет назад

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

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

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

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

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

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

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

  • @ДмитроМартинов-о8з
    @ДмитроМартинов-о8з 4 года назад

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

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

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

  • @lichlichi
    @lichlichi 6 лет назад

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

  • @aslan1504
    @aslan1504 7 лет назад

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

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

    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 (ruclips.net/video/ZJ63ltuwMaE/видео.html) по организации всесторонней защиты бизнес-логики (правда тоже с привязкой к PHP) + реализованный по этому принципу проект (github.com/norzechowicz/mydrinks)

    • @ИванИванов-в7е3у
      @ИванИванов-в7е3у 8 лет назад

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

  • @evgix
    @evgix 9 лет назад +8

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

    • @ЦарьковВиталий-ю3ы
      @ЦарьковВиталий-ю3ы 9 лет назад

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

    • @ЦарьковВиталий-ю3ы
      @ЦарьковВиталий-ю3ы 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 лет назад

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