Чистая архитектура и Domain-Driven Design

Поділитися
Вставка
  • Опубліковано 25 гру 2024

КОМЕНТАРІ •

  • @ИванНикитин-ч7б
    @ИванНикитин-ч7б 2 роки тому +4

    Чем дольше смотришь этот ролик, тем чаще вспоминаешь, как он кинотеатр просто театром называл в начале.

  • @koyard22
    @koyard22 7 місяців тому

    На 1:35:55 запросы в базу в цикле делаются. Невероятно чистый код! Превосходная производительность! Браво, пишите ёще!

  • @SklerozRu
    @SklerozRu Рік тому +1

    На 11:45 заслуженный лайк за отличное сравнение. Мне очень понравилось, о многом задумался.

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

    Огромное спасибо! Подача - огонь.

  • @electricdust2357
    @electricdust2357 3 роки тому +3

    Спасибо! Очень интересно и ясно подали идею! 👍

  • @alexeystaroverov4804
    @alexeystaroverov4804 3 роки тому +22

    вы можете обрезать начало где идут понты?

    • @s2s4d5s1
      @s2s4d5s1 2 роки тому +2

      Дак кажется тут только понты и есть все видео из них

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

      Я перемотал понты

    • @Deletedeletedelete
      @Deletedeletedelete Рік тому +6

      Видео без понтов - безпонтовое

    • @ДавидТотраев
      @ДавидТотраев 10 місяців тому

      😂😂😂 +1

    • @thegeneralopinion9713
      @thegeneralopinion9713 7 місяців тому

      ахаха беспонтовое@@Deletedeletedelete

  • @DevBrothersPro
    @DevBrothersPro 3 роки тому +46

    В докладе говорится и о чистой архитектуре, и о DDD, и о модульном монолите, и о распиливании на микросервисы. В результате и обо всем сразу, и ни о чем конкретно. Лучше было взять одну тему, но рассказать ее подробно.
    Не прозвучал главный тезис, описывающий взаимоотношения чистой архитектуры и DDD: чистая архитектура про то, как сделать отдельно взятый баундед контекст, DDD - как большую систему разделить на эти контексты и настроить взаимодействие между ними.
    Про чистую архитектуру слишком слабо, показанный игрушечный пример не дает ответов на вопросы, которые возникают в реальных проектах:
    - куда девать логику, которая не запихивается в один агрегат? (например, среди всех entities у одной установить IsDefault, а у всех остальных сбросить)
    - как переиспользовать между юскейсами дублирующуюся логику
    - как лучше реализовать юскейсы, один класс на каждый юскейс, или сервис, в котором реализованы все юскейсы для агрегата
    - контроллеры, обязательно ли их выделять в отдельный слой
    - в показанном примере юскейсы (RemoveMealFromCartUseCase) находятся в одном слое с интерфейсами инфраструктуры (CartExtractor), этот косяк есть как в книге дяди Боба, так и во всех реализациях чистой архитектуры, которые я видел. Практичнее выносить их в отдельный компонент, но тогда ломается правило зависимостей, согласно которому наружный слой может использовать любые внутренние, но контролеры не должны ходить в инфраструктуру в обход юскейсов.
    Прозвучал тезис, что в случае с чистой архитектурой нужно создавать больше классов, чем в какой-то другой (видимо слоистая имелась ввиду). Но не показано примера, на котором это видно.
    Ну и зачем были нужны маркетинговые враки типа "полгода работы без базы", "по щелчку пальцев с десктопа на веб" я вообще не понимаю, лучше бы закончили пораньше, а не развозили болтовню на 2 часа.

    • @DDDevotion
      @DDDevotion  3 роки тому +3

      Да, наш пример относительно игрушечный, но боевой код с прода мы показать не можем. Это обзорная лекция и все подводные камни за два часа разобрать просто нереально.
      О взаимоотношении чистой архитектуры и DDD мы говорим на 40:21. ЧА - для выделения модулей, в том числе отделение техники от бизнеса, а также техники между собой, DDD - добавляет модульность с точки зрения бизнеса при помощи ограниченных контекстов.
      Всё что мы рассказываем взято исключительно из личного опыта и практики коллег. Отчасти мы показываем это на нашем примере, но похожий пример про базу данных можно увидеть в книге Р. Мартина «Чистая Архитектура» - часть V, глава 17. Fitnesse.

  • @alexandr1408
    @alexandr1408 4 дні тому

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

  • @АлександрРезов-ь3ф

    Шикарная подача

  • @MakarovSoftware
    @MakarovSoftware 2 роки тому +14

    Офигенные ребята, очень бодро и весело рассказывают! Но когда дело дошло до кода - началась каша, я окончательно запутался, где что и кем используется, заплакал и ушел)

  • @TbIPDblM
    @TbIPDblM 7 місяців тому

    Интересное обобщение, но не на все случаи жизни)

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

    Спасибо!

  • @taksed0
    @taksed0 2 роки тому +12

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

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

    Фух не так просто выиграть Евгения в гляделки, но я это сделал

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

      (минуте к тридцатой)

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

    работали вместе с Сергеем в РТЛабсе)

  • @petrplotnikov4307
    @petrplotnikov4307 5 місяців тому

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

  • @thegeneralopinion9713
    @thegeneralopinion9713 7 місяців тому

    47:26 - парень Евгений говорит, что ничего страшного нет, чтобы расширить интерфейс ради 1 объекта, хотя другим оно не надо --> ничего страшного. Как ничего страшного? А внести изменения в конструкторы во всех местах? Или в сигнатуры методов. Что-то непонятно.

  • @DimaTiunov
    @DimaTiunov 11 місяців тому

    Звук это инфраструктурный слой?
    ЕРЕТИК

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

    Где вы джима керри нашли?

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

    Опа, Бухаров, а нам не скинул видос -_-

  • @GamDevRus
    @GamDevRus 8 місяців тому

    папка в проекте это не ген план. ген план это диаграмvа use case, из которой например и будет понятно назначение приложения :)

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

    Видно что Сергей Бухаров умеет донести инфу слушателю , приятно его слушать

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

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

  • @СергейБуслюк-ь3и

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

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

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

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

    шикарная подача!!

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

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

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

      для этих сценариев просто идеально подходит GraphQL (использовали на проде и это было шикарно)

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

    Объясните, пожалуйста, как блюдо добавляется в меню?

  • @IvanBorisov-x6t
    @IvanBorisov-x6t 2 роки тому +1

    Сравнение скрина фреймворка с чертежами, дикая дичь. Вы бы фото кирпича показали ещё... Или оглавление проектной документации...

  • @zeroidandroid
    @zeroidandroid 2 роки тому +2

    Не так всё однозначно не слайде "Чем придётся заплатить", имхо, ключевой момент всей этой чистой архитектуры. Тк в реальном проекте так и выходит: тут не1 однозначно, там не однозначно, 10 раз не однозначно, и вот мы уже получили винегрет из "слоистой" и чистой архитектуры...
    Пол года без БД? Да вы о чем? Нас после этого всех разгонят. Все проекты делаются по принципу "нужно было ещё вчера", если ты через неделю не покажешь работающую админку заказчику -- будешь потом на собеседовании рассказывать про чистую архитектуру и пол года без бд! 🤣🤣🤣 я конечно утрирую, но и вы тут перегнули палку, надо было сценарий лучше прописать ;)
    Пример с театром -- сильно надуманный, немного портит впечатление, сразу хочется поспорить :)
    А так видео хорошее, спасибо! Есть пара новых моментов о чем подумать :)
    Правда лучше смотреть на скорости 1,5х :))))

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

      Один из законов разработки:
      Everything in software architecture is a trade-off)

  • @DenisB-d5f
    @DenisB-d5f Рік тому +1

    Структура папок и файлов - это не чертежи, это уже реализация.
    "Чертежи" приложения - это какие-нибудь UML-схемки, диаграмки. А из них уже более чем понятно что за приложение.
    Мысль годная, сравнение - бестолковое.

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

    9:25 осуждаем

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

      Раскройте подробнее?)

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

      @@gradeaification ну надо интересоваться всем, тем более что на фронте целый мир, не легче чем на беке )

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

      @@ahmedrapira7610 слишком он большой стал и стремительный, я тоже перестал успевать и забросил)

  • @ВасилийСоло
    @ВасилийСоло Рік тому

    У нас не очень много времени потому потратим 30 минут что бы посмотреть на дибильные вопросы результатом которых, о боже, не вероятно, домен является самым важным. РАНЬШЕ думал что самое главное это фреймворк которые раз в год выходит новый

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

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

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

    Евгену тяжело пришлось роль играть несведущего))

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

    Я услышал много про чистую архитектуру и почти ничего про DDD. Такое чувство, что спикеры пытаются подсунуть чистую архитектуру под видом DDD.

  • @СтаниславСедов-и4ж

    Некорректная связь между ген. планом и структурой каталогов приложения. Вместо этого стоило бы использовать UML диаграммы тогда уж.

  • @smartphone6498
    @smartphone6498 3 роки тому +3

    Про анемичную модель - не убедил!

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

    Спасибо! Очень интересно! Также понравилась книга Get Your Hands Dirty on Clean Architecture by Tom Hombergs , там немного по другому структура папок сделана, но идеи те-же

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

      Regarding books, the content of Matthias Noback is very good which is going in the right direction to implement Clean Architecture. Also Implementing Domain Driven Design and Growing Object-Oriented Software Guided By Tests.

  • @DevBrothersPro
    @DevBrothersPro 3 роки тому +3

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

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

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

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

    Есть подозрение, что написав проект без чистой архитектуры, а с обычной продуманной архитектурой разницы будет ноль, просто программистам скучно. Если бы этот подход был лучше стандартного анемичного например, то он бы уже стал стандартом, как реактивное программирование на js например.

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

      >просто программистам скучно.
      В каком смысле скучно? Скучно написать продуманную архитектуру?

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

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

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

      И как тогда лучше?

  • @renarsdilevka6573
    @renarsdilevka6573 3 роки тому +7

    If you are experts, why you would need to play and simulate that you do not understand what you are talking about? Feels like you lack your own ideas and lot of first minutes of the presentation is just copied the idea of Robert Martin anyway. Why you need to pretend? Talk to the point, otherwise those who already know they just waste time, as you claim you are such an experts. Right after 15 min, a lot of insignificant information, and that playing just pisses me off.
    Robert Martin is the best, please do not try to copy his content as your own, integrate in your own ideas.
    And try to be more humble, the egoism level is quite high here (why i would care what books you have around with Uncle Bobs book, whose shelf it is anyway?), like i should be proud that you play chess. It is the same as those people who put their photos of their marriage and with their newborn babies, and cats and dogs in costumes and party time pictures in internet.
    It feels like you want to be heard (internet is full of this stuff already).
    This is not the way, because it looks like 2 clowns talking without any logical intent.

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

    Чушь, до конца не досмотрел не хватило терпения вода какая-то

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

    Я прям плакать начинаю, когда представляю длину файла UseCaseConfiguration.kt для реального ентерпрайс проекта, в котором хотя бы 100+ безнес задач. ))))

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

    Спасибо!!!