Size: a a a

2022 January 12

VG

Vlad Gaiduk in symfony
Если правильно делить по фичам то много маленьких какашек не принесут больших проблем
источник

VF

Valerii Frolov in symfony
а кучу мелких?)
источник

П

Павел in symfony
Есть мануалы понятные по ddd?
источник

MW

Maxyc Webber in symfony
источник

П

Павел in symfony
Капец как долго и много, по порядку смотреть?
источник

MW

Maxyc Webber in symfony
клева было бы как в матрице. нажал кнопку и все загрузилось и ты уже умеешь управлять вертолетом )
источник

MW

Maxyc Webber in symfony
https://habr.com/ru/company/dododev/blog/489352/ еще и почитать попорядку
источник

АЕ

Александр Ерин... in symfony
Это дает выделить домен, сделать из него конечный автомат(в широком смысле), и дергать API вашей доменки(один из UseCase) из разных точек входа в приложение (админка/пользовательский экшн/консьюмер/метод старого API), и все эти точки входа могут дергать один единственный UseCase.

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

В итоге получаем четкие границы слоев, каждый из которых имеет свои ответственности, и позволяет переиспользовать код, который находится на более низких уровнях(более близкими к ядру приложения)
Можно погуглить картинку "Чистая архитектура", станет чуть понятнее
источник

АЕ

Александр Ерин... in symfony
Ну и тестировать все это становится значительно проще.
Например, если мы используем богатую модель - то соблюдения инвариантов сущности можно проверить юнитами, и не трогать базу, UseCase можно покрывать интеграционными тестами без привязки к HTTP, а точки входа - своими функциональными тестами(в случае http - эмуляция запроса через kernel)
источник

SP

Sergey Protko in symfony
слои про дата флоу, про функциональную ответственность модули
источник

SP

Sergey Protko in symfony
мы разделяем дата флоу на слои (аутентификация, авторизация, трансформация какая, юзкейс, домен) для того что бы можно было лучше этим всем управлять. При этом слои сами по себе сущестуют больше в рантайме и не обязаны быть закреплены в коде. Разве что "отдельные элементы на разных уровнях в любом случае будут отдельными модулями". Но не обязательно иметь папку UseCases
источник

SP

Sergey Protko in symfony
цель наша - выстраивать высокоуровневую логику из более абстрактных примитивных блоков, emergence такой выходит
источник

SP

Sergey Protko in symfony
нет "богатой" модели, есть "насыщенная"
источник

АЕ

Александр Ерин... in symfony
Да, согласен, тут слово "функциональную" было в широком смысле, например функция контроллера, как слоя представления - забрать данные из Request, переложить их на DTO, и передать в Handler
источник

SP

Sergey Protko in symfony
anemic vs rich это не про "бедную богатую". Метафора тут в том что если логика вытекает и размазывается это делает модель анемичной, как если ты уберешь кислород из крови. А то люди это воспринимают как две крайности из-за неверной инетпритации метафоры, а речь больше про "болею и норма"
источник

SP

Sergey Protko in symfony
на самом деле очень важный вопрос в этом всем - управление транзакциями и точки расширения. очень удобно когда один юзкейс - одна логическая транзакция. Могут быть варианты при котором одна бизнес операция это больше одной логической транзакции. Как в этом случае структурировать дата флоу - отдельный вопрос
источник

SP

Sergey Protko in symfony
ну мол, удобно когда у тебя юзкейс есть "зарегистрируй юзера" и по завершению транзакции твой юзкейс кидает доменный ивент "юзер зарегистрирован". Этот ивент может быть точкой расширения и продолжением флоу данных на которые могут быть подписаны другие подсистемы и запускать свои юзкейсы
источник

k

knopkod4v in symfony
1 и 3 пункты по сути про реюз кода
я вижу проблему в том, что идея разделения на слои никак не ограничивает этот реюз
Получается, что каждый юзкейс может зависеть от любого количества объектов из слоя домена и это выглядит как шаред стейт
источник

SP

Sergey Protko in symfony
это уже про контексты
источник

SP

Sergey Protko in symfony
при этом в каждом контексте мы можем свои правила вводить относительно дата флоу. В каком-то контексте все это надо, в другом можно просто делать инсерты из контроллера. Мы всеравно захотим сделать таких вариантов дата флоу не очень много - 2 может 3
источник