Size: a a a

Software Design/Architecture/Zen

2021 November 16

ПГ

Павел Г. in Software Design/Architecture/Zen
А в чем профит будет переделывать всё на корень?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
а в чем профит объединять агрегаты?
источник

ПГ

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

SP

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

ПГ

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

AV

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

SP

Sergey Protko in Software Design/Architecture/Zen
Там выше описано как это нормально через eventual consistency форсить
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
Это же подразумевает асинхронность?
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
ну да, в конечном счете, к этому и придет собственно
источник

SP

Sergey Protko in Software Design/Architecture/Zen
да, ну или если конкаренси низкий то можно и без асинхронности
источник

SP

Sergey Protko in Software Design/Architecture/Zen
либо очереди либо локи
источник

ПГ

Павел Г. 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
но для простых кейсов достаточно сделать лок в базе)
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
@fes0r Понятно, спасибо :)
источник

A

Alexander in Software Design/Architecture/Zen
Подскажите как быть в такой ситуации. У агрегата есть правило проверки инварианта, которое со временем изменили. Все старые записи в бд соответствуют старому инварианту.

Как быть при создании объекта агрегата в репозитории?

Сделать агрегату конструктор, который принимает сырые данные и отдельно фабрику которая через сеттеры (с проверкой инварианта) задает данные?

Или новый инвариант должен учитывать старый? И в таком случае ориентироваться на id/дату создания агрегата. У всех агрегато до определенного id/даты - один инвариант, у других - другой?
источник

МВ

Михаил Влазнев... in Software Design/Architecture/Zen
Написать миграцию, которая приведет старые инварианты к новому виду, мб?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
а че бизнес сказал на эти вопросы когда правила менял? Или ты эти вопросы им не задавал? тогда задай
источник

AS

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