Артём Антоненко «Domain Driven Design» | CODEiD (11.08.2018)

Sdílet
Vložit
  • čas přidán 21. 08. 2018
  • Артём Антоненко, Application architect in XLNTech выступил на конференции CODEiD - PHP Odessa Conf #4 с темой «Domain Driven Design».
    «Очень много разработчиков, выбравших PHP основным языком программирования, получили свои знания по архитектуре из инструкций для фреймворков. Немногие обратились к источникам, которые написаны для (с помощью) Java, C++ и других языков. Язык PHP уже давно перестал быть уделом домохозяек и перешел в инструменты для разработки enterprise приложений.
    Но как писать такой код, который будет понятен и легко расширяем через год, два и более?
    Как подготовить монолит к разделению на микросервисы?
    Как выстроить эффективное взаимодействие со stakeholders?
    На эти вопросы отвечает предметно-ориентироанние программирование.»
    Презентация: bit.ly/2V2o32L
    CODEiD - это всеукраинское сообщество PHP-разработчиков. Наша цель - создать сильное сообщество всех, кто увлечен PHP-разработкой, и принимать в нашем уютном приморском городе коллег со всей Украины и мира.
    Подписывайтесь на наши страницы:
    Telegram: t.me/codeidua
    Facebook: / codeidua
    Twitter: / codeidua
    Instagram: / codeidua
  • Věda a technologie

Komentáře • 46

  • @alexanderbalabin9586
    @alexanderbalabin9586 Před 2 lety +5

    прежде чем засесть за шабл пр и DDD, не забывайте несколько важных моментов : 1)Как бы вы не пыхтели и не чесали репу громоздя абстракции, через несколько лет это все равно станет старым и непотребным говном. Что и кто бы вам не говорил. Откройте любой крутой проект, написанный 5 - 7- 10 лет назад, посмотрите на яз.конструкции, библиотеки и пр. обвесы. 2) Тема ШП, DDD в большой степени "греет" разного рода консультантов и нужна прежде всего им. 3) Современные тенденции постепенно смещаются к упрощению языков, минимализации абстракции и пр.

    • @zond_amond
      @zond_amond Před 2 lety +1

      все тлен, можно ничего не писать

  • @andriiptashynskyi8089
    @andriiptashynskyi8089 Před 4 lety +13

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

    • @chrise202
      @chrise202 Před 4 lety

      И да и нет, при такой архитектуре частенько придется проверять если именно юзер авторизирован совершать дейстие Х. А то что в каждом контектсе Юзер декорируется дополнительными полями и становиться Покупателем, Лидом, КонтрАгентом это тоже верно. Одно другому не мешает.

  • @ivan_lebedev
    @ivan_lebedev Před 4 lety +5

    Спасибо за доклад! Не смог мимо ДДД пройти)

  • @danillazarev6318
    @danillazarev6318 Před 4 lety +3

    Спасибо за доклад

  • @dmitriylezhnev1465
    @dmitriylezhnev1465 Před 5 lety +2

    Отлично подано! Спасибо!

  • @KyPa187
    @KyPa187 Před 3 lety +3

    Спасибо за доклад и скелетон

  • @rusrb
    @rusrb Před 4 lety +7

    Если не чайник можно начинать смотреть с 12:00 минуты )) Спасибо за доклад!

  • @petrkassadinovich2705
    @petrkassadinovich2705 Před 4 lety +5

    Спасибо за доклад!
    Используем примерно ту же имплементацию, что показал Артём. Пишем при этом на .Net Core

    • @trentonturner5820
      @trentonturner5820 Před 3 lety

      I realize it is pretty off topic but do anyone know of a good site to watch new series online?

    • @nathanaeldiego7292
      @nathanaeldiego7292 Před 3 lety

      @Trenton Turner I watch on flixzone. Just search on google for it :)

    • @santiagoparker3500
      @santiagoparker3500 Před 3 lety

      @Nathanael Diego definitely, have been using FlixZone for months myself =)

    • @trentonturner5820
      @trentonturner5820 Před 3 lety

      @Nathanael Diego thanks, I went there and it seems to work :) I appreciate it!

    • @nathanaeldiego7292
      @nathanaeldiego7292 Před 3 lety

      @Trenton Turner You are welcome =)

  • @user-ts4fi8he8m
    @user-ts4fi8he8m Před 4 lety +3

    В ddd косвенно накладываются архитектурные границы где в главе - домен

  • @EshkinKot1980
    @EshkinKot1980 Před 4 lety +3

    Круто, спасибо.

  • @SLAv00Ik
    @SLAv00Ik Před 5 lety +1

    А если HttpMapper будет посылать запрос на эндпойнт, к примеру, регистрации. Придется дополнить BaseMapper интерфейс методом register(по задумке автора) ?

  • @denisov1985
    @denisov1985 Před 3 lety +2

    Интересно слушать

  • @aleksandrkravtsov8727
    @aleksandrkravtsov8727 Před 4 lety +4

    топ доклад

  • @maksimsergeevich5939
    @maksimsergeevich5939 Před 3 lety +1

    Интересный и полезный доклад! Спасибо!
    А подскажите кто-нибудь пожалуйста, как обычно имплементируется сущность User в контексте Пользователя приложения?
    Что обычно в себе реализует class User большинства проектов? Где User это просто пользователь сайта (админ, посетитель сайта, авторизованный посетитель сайта и тд), который может читать, писать, удалять, обновлять данные.
    Он что-то вообще должен делать или просто выступает в роли тупого хранилища value-object?
    Например, я так понимаю, для авторизации, регистрации пользователя обычно делается сервис-класс, который этого юзера регистрирует, авторизует и тд, так как User сам себя не авторизует и не регистрирует.
    Но что-то юзер должен делать?
    И, если знаете примеры которые мне могли бы быть полезны (желательно на Typescript/JS), дайте ссылку пожалуйста на Github.

  • @SLAv00Ik
    @SLAv00Ik Před 5 lety +4

    "Почему мне не понравился Validator Symfony? Потому что невалидные состояния могли у меня проникнуть в логику."
    Так незачем использовать Validator Symfony для валидации Сущностей. Попытка создать Сущность с невалидным состоянием вполне спокойно может быть прервана с помощью выброса исключения доменного уровня внутри создаваемого объекта (т.к. Information Expert из GRASP).

    • @SLAv00Ik
      @SLAv00Ik Před 5 lety

      ​@Artem Antonenko
      Symfony Forms и Symfony Validator отлично подходят, чтобы отвалидировать пользовательские данные ( внешний слой ). С доменным слоем инфраструктуру фрэймворка не рекомендовал бы завязывать.
      "Задача заключается в том, чтобы выявить и устранить невалидное поведение как можно раньше" - Ну, в таком случае, следует дублировать логику валидации в слое представления. Если все-таки задача "выявить и устранить невалидное поведение как можно раньше" не так важна, можно делегировать валидацию доменному слою. Если нужна детальная валидация всех данных, полученных от пользователя, в доменном слое следует использовать Notification Pattern ( как вариант ) martinfowler.com/eaaDev/Notification.html

  • @DmitriiSapronov
    @DmitriiSapronov Před rokem

    Все таки не-анимичные модели лично для меня это ключевое в ДДД, а тут только анимичные :( но все равно спасибо за доклад

  • @SLAv00Ik
    @SLAv00Ik Před 5 lety

    "За инвариантность анемичной модели отвечает Builder". А что в ситуации, когда пытаемся мутировать состояние уже созданного объекта?

    • @SLAv00Ik
      @SLAv00Ik Před 5 lety

      @Artem Antonenko боюсь, что вы неправильно меня поняли. В любом случае, состояние агрегата как-то мутируется ( это связано с наличием поведения у rich domain объектов). Например, если администратор банит пользователя на форуме, его статус (пользователя) поменяется с "active" на "banned". Как, в подобных ситуациях, паттерн Builder поможет помочь соблюсти инварианты?

  • @kinordikus
    @kinordikus Před 3 lety +1

    Было всё понятно до момента пока не начали задавать вопросы ....))))

  • @SLAv00Ik
    @SLAv00Ik Před 5 lety +1

    В "Слоевой" архитектуре где-то потерялся Application Layer.

    • @SLAv00Ik
      @SLAv00Ik Před 5 lety +1

      Все, услышал: "Application находится в Infratructure Layer'е".
      И как же он туда попал, интересно?

    • @sdfzghjk
      @sdfzghjk Před 5 lety +1

      @Artem Antonenko об application layer Эванс писал в своей книге.
      Вернон точно говорит об application services (которые находятся а app-layer) в своей книге. Причем и в контексте применения как слоевого стиля, так и гексагонального стиля (ports-adapters) архитектуры.
      Из того что помню, App layer управляет безопасностью, транзакциями и является прямым клиентом репозиториев. Единственным клиентом app-layer'a является слой UI (presentation).

    • @SLAv00Ik
      @SLAv00Ik Před 5 lety +1

      @Artem Antonenko Также дополню ответ Давида Перманова, что благодаря Application Layer мы получаем возможность, представить Presentation Layer, как говорил Дядюшка Боб, в виде плагина. Т.е. один и тот же юзкейс можно исполнять из разных видов ui, без переписывания кода : REST API, SOAP, Web, CLI и прочее. Если же у Вас "Application находится в Infratructure Layer'е", с реюзабельностью юзкейса будут проблемы)

    • @ivan_lebedev
      @ivan_lebedev Před 4 lety

      @@SLAv00Ik У Фаулера по моему 11 видов архитектур слоистых описано по версии разных инженеров. Такая абстракция как Application layer может быть избыточна в каких то системах.

  • @i.am.rossalex
    @i.am.rossalex Před rokem

    Простите за ссылку, но у вас описано очень тяжело... Хотя новое я узнал для себя. Лучший доклад, что я слышал для новичка тут: czcams.com/video/rjtbCyacJas/video.html

  • @SLAv00Ik
    @SLAv00Ik Před 5 lety +5

    С каких пор DataMapper является альтернативой Repository?

    • @sdfzghjk
      @sdfzghjk Před 5 lety

      @Artem Antonenko czcams.com/video/_CK5Kag7enw/video.html

    • @valentjedi
      @valentjedi Před 5 lety

      @@sdfzghjk Я думаю, active record имелся в виду. Типа active record vs repository. Артем даже сказал "active record" разок.

    • @SLAv00Ik
      @SLAv00Ik Před 5 lety

      @Artem Antonenko "Но в целом, использование паттерна Репозиторий как коллекции, в пхп (запрос/ответ подход) не имеют особого смысла" - можно более тезисно?

    • @ivan_lebedev
      @ivan_lebedev Před 4 lety

      @@valentjedi Репозиторий можно использовать и с ActiveRecord, нет проблем. Это патерны разных уровней. Repository патерн доменной модели, а ActiveReсord патерн персистинга в энергонезависимую БД.

  • @zond_amond
    @zond_amond Před 2 lety

    Так себе и представил девелопера: "Бизнес, чет вы херню говорите - идите нафиг". А зп он сам будет себе платить?

  • @KyPa187
    @KyPa187 Před 3 lety +1

    писиар)))

  • @sainmorton
    @sainmorton Před 3 lety +6

    Ептаюмать, столько слов которые можно было просто на русском сказать

    • @alexeykupersthokh
      @alexeykupersthokh Před 3 lety

      У меня аж смузи из монитора закапало

  • @kdenisinfo
    @kdenisinfo Před 3 lety

    Какой я хороший поработайте со мной а иначе вы все делаете не правильно - ещё очередная ddd барыга без достаточного опыта

    • @socialcatalyst2608
      @socialcatalyst2608 Před 3 lety +1

      Скинь Ютуб с опытным небарыгой ddd

  • @maximpavl745
    @maximpavl745 Před 2 lety

    Размазоно все, не интересно

  • @FreemanFromSteppe
    @FreemanFromSteppe Před 10 měsíci

    Слава Украине!