Size: a a a

Software Design/Architecture/Zen

2021 July 18

HH

Human Human in Software Design/Architecture/Zen
Какая то граница где данные меняются атомарно. И эта граница не пересекается с другими
источник

HH

Human Human in Software Design/Architecture/Zen
В результате у нас появляется eventual consistency
источник

СП

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

СП

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

HH

Human Human in Software Design/Architecture/Zen
Ну например если все один агрегат.
Или когда мы меняем и лочим в одной транзакции  вместе X1 и X2 , а потом X2 и X3
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
это агрегаты?
источник

HH

Human Human in Software Design/Architecture/Zen
Это условные данные
источник

HH

Human Human in Software Design/Architecture/Zen
Которые мы меняем
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
У меня не хватает знаний, не пойму в чем вопрос :)
источник

СП

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

HH

Human Human in Software Design/Architecture/Zen
Ну вот пример
есть данные
A B C D
есть инварианты
A > B
C < D
(B + C) > 100
есть юзкейсы
хотим поменять A - лочим A,B
хотим поменять B - лочим A,B,C
и т.д.

какие тут агрегаты?
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
ну тут получается a, b, c, d - сущности/агрегаты и они должны иметь итоговую согласованность, так выходит?
источник

HH

Human Human in Software Design/Architecture/Zen
Я не знаю:) Я просто пытаюсь рассуждать логически.
Ты спросил как можно без агрегатов, вот как пример. Или если же агрегаты существуют всегда, то мне вот хотелось бы понять где границы в моем примере
источник

SP

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

SP

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

SP

Sergey Protko in Software Design/Architecture/Zen
но смысл именно в декомпозиции модели, разделении ее на составные части и вот это все.
источник

HH

Human Human in Software Design/Architecture/Zen
По идее, DDD учит, что если все три инварианта выше очень важны и должны быть атомарны, то это один агрегат. Но в тоже время в примере выше можно менять 2 значения одновременно.
источник

HH

Human Human in Software Design/Architecture/Zen
Хз, интересно узнать 🙂
Я думаю для того, чтобы функции не имели лишних зависимостей. Те чтобы мы могли работать только с тем, что нам нужно
источник

HH

Human Human in Software Design/Architecture/Zen
Я видел, что ты писал - можно все разбить на (one value + ID)
источник

SP

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

Тут сложность именно в том что бы определить какие из инвариантов стэйта являются true invariants и на самом деле требуют этой самой immidiate consisntency. ДДД тут учит именно что ты не можешь знать ответ на этот вопрос без колаборации с бизнесом и без построения модели вместе.

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

Можно в целом игнорировать все эти вопросы и смотреть на все это исключительно с позиции всяких там SOLID и/или GRASP, там соблюдение всех принципов (пусть и не полное) всеравно будет направлять к большей декомпозиции стэйта.

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