Size: a a a

2021 September 27

ЕК

Евгений Котов... in symfony
штош, пошел изучать acid, уровни изоляции и прочее) спасибо что подтолкнули в эту сторону)
как бы и так думал насчет этого, но как-то слабо (мы как бы еще не релизнулись, лол)
источник

VG

Valentin Gerbey in symfony
ACID и уровни изоляций это конечно хорошо, но глянь ещё что такое мутекс и какие проблемы он решает, а про агрегаты тут сто раз кидали ссылку на вернона статейки, если вдруг не дошли руки(а судя по большим агрегатам они не дошли) то можно их ещё покурить, может посмотришь по другому на eventual consistency
источник

SP

Sergey Protko in symfony
начни с оптимистик локов. в 90% ситуаций их хватает
источник

SP

Sergey Protko in symfony
источник

ЕК

Евгений Котов... in symfony
почему сразу большим? у меня договор из 10 сущностей, методов у AR около 20 (можно было до 12-15 снизить, но я не стал обобщать), больше не предвидится, ну может еще один тип первичного дока подъедет (типа товарный чек)
и то пара-тройка сущностей довольно легкие/тупые
выглядит небольшим
я не пока очень в курсе как оценивать жирность агрегата) оцениваю больше исходя "пока это лучший вариант до которого додумался, работать с этим более менее несложно"
источник

SP

Sergey Protko in symfony
ну это уже жирненько я тебе так скажу
источник

SP

Sergey Protko in symfony
конечно когда у нас не колаборатив домен (вероятность конфликтов низкая) то...
источник

ЕК

Евгений Котов... in symfony
ну типа методы "отправить акт на согласование", "согласовать акт", "отменить акт", и аналогичное для накладной.. можно было свести к "отправить первичный документ на согласование" и далее по аналогии, но мне кажется что обобщить я всегда успею
источник

SP

Sergey Protko in symfony
источник

SP

Sergey Protko in symfony
я когда-то для своих делал диаграмку мол "где надо париться о локах CQRS и прочих шляпах". Почти все обычно в зеленой зоне
источник

SP

Sergey Protko in symfony
париться надо начинать когда переходим в collaborative часть и вероятность конфликтов резко повышается
источник

ЕК

Евгений Котов... in symfony
вот мой агрегат можно назвать как "стороны имеют полностью согласованный утвержденный договор и теперь они создают закрывающие доки, согласовывают и подписывают их"
может подписание можно унести отдельно
тогда получится 2 менее жирных агрегата 🤔
я вообще правильно мыслю по поводу разделения?
источник

SP

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

SP

Sergey Protko in symfony
что бы побольше было операций по вероятность конфликтов ближе к "обновить свой профиль"
источник

ЕК

Евгений Котов... in symfony
кстати, а если у меня еще есть споры?) типа стороны не могут согласовать акт, открывают спор и тут еще арбитраж участвует
явно же не стоит пихать это в агрегат? ну то есть в этот один агрегат, уже будет перебор наверное
источник

ЕК

Евгений Котов... in symfony
мне скорее всего нужны будут отдельные агрегаты, где именно споры будут
источник

SP

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

SP

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

SP

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

ЕК

Евгений Котов... in symfony
ну вот споры.. типа открываю спор, работу с исходными доками - замораживаю
в споре достаточно иметь ссылки на нужные целевые доки, остальное - данные и поведение - только что касается спора
определенно отдельный агрегат, как я понимаю, правильно же мыслю?
если участникам спора надо посмотреть сам док - его можно взять из исходного агрегата
смотреть можно, стейт менять нельзя
источник