Size: a a a

Software Design/Architecture/Zen

2021 June 14

СП

Сергей Предводителев... in Software Design/Architecture/Zen
м... наверное даже домен знает, это ведь требование бизнеса
источник

V

Viktor in Software Design/Architecture/Zen
Я не про это, а про то, что некоторые записи не могут быть роллбэкнуты
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Условно у нас есть бизнес операция - юзкейс какой-то. Это у нас на уровне application. В рамках этой операции нам надо совершить две логические транзакции - каждая со своим агрегатом.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Очень упрощённо - домен предоставляет маленькие логические транзакции из которых ты собираешь юзкейсы
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Да, всё так.

Для примера, система учета денег. Много счетов. Есть счета, которые заводятся для клиентов. При создании клиента должен создаться счет для него и привязаться к клиенту.

в рамках юзкейса:

- создать счет
- создать клиента

Эти две операции либо должны быть выполнены транзакционно
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Думаю еще как вариант вместо транзакций для application уровня сделать интерфейс с методом наподобие

saveNewClientWithAccount($client, $account)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
и что это тебе даст?
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
инфраструктура будет однозначно знать что нужно сделать одновременно
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну то есть такой вот unit of work для бедных?
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Вроде того выходит :)
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Хотя такое упрощение в конечном итоге может усложнит код...
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну вот надо задаться вопросом какую цель ты приследуешь. Сразу оговорюсь что к DDD это все имеет не оч большое отношение - оно может помочь с моделированием и декомпозицией, дальше просто separation of concerns coupling/cohesion, information hiding все дело делает
источник

SP

Sergey Protko in Software Design/Architecture/Zen
главное что бы было легко проследить как данные меняются, что бы предсказуемо
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Как ни крути всё равно приходится учитывать инфраструктуру при проектировании application-слоя. Если я знаю, что в рамках текущего контекста у меня всё в одной БД, то можно смело делать TransactionManagerInterface и его использовать - можно быть уверенным, что проблем не будет.
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Хотелось выработать какой-то универсальный подход.
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Сага же может быть границей транзакции
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Само название метода говорит что это 2 разные операции, которые могут быть запущенны по отдельности.
Если у тебя клиент не может  существовать без счета в принципе (или наоброт), и тебе так важно это все засунуть в транзакцию, то Сделай это правилом а метод юзкейса назови addClient
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
да, но это сильно усложняет реализацию
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
другой счет может быть без клиента создан, а вот клиент всегда со счетом должен создаваться.

В application слое это и называется createClient и в этом методе уже нужно транзакционно сделать и счет и клиента.

Что значит "сделай это правилом" ?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
А если в разных, что меняется?
источник