Size: a a a

Software Design/Architecture/Zen

2021 November 23

E

Emanresun in Software Design/Architecture/Zen
агрегат не обязательно должен быть больше чем 1 энтити?
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
агрегат это граница транзакции, у тебя что угодно может быть границей, хоть сущность с id без единого другого поля)
источник

E

Emanresun in Software Design/Architecture/Zen
типо такого видимо
источник

E

Emanresun in Software Design/Architecture/Zen
источник

E

Emanresun in Software Design/Architecture/Zen
никогда в жизни не слышал столько раз повторения слова "инвариант"
источник

E

Emanresun in Software Design/Architecture/Zen
добавляю в свой словарный запас, буду солиднее
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
видимо тебе надо прошарить в UML) а я спать)
источник

E

Emanresun in Software Design/Architecture/Zen
uml прошарен, не помню там "инвариантов")
источник

E

Emanresun in Software Design/Architecture/Zen
спасиб что помог поразбираться
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
ну, тогда ты бы сразу понял что CustomerId не агрегат))) вообще схема не топ
источник

E

Emanresun in Software Design/Architecture/Zen
не, я про то что vo тоже считается частью агрегата, я был не в курсе
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Агрегат это не просто "кучка объектов". Это граница транзакции
источник

SP

Sergey Protko in Software Design/Architecture/Zen
https://www.dddcommunity.org/library/vernon_2011/ - вот тут есть немного сжатой инфы на эту тему
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
если говорить о UML, то агрегат очень близок к агрегату в UML, c тем лишь различием, что UML накладывает ограничения только на время жизни в программе во время выполнения, в ddd же это расширено, потому что мы говорим о том что инварианты агрегата не должны нарушаться, тем самым ограничивая доступ к данным на запись(или в случае отчетов, как в примере в статье, у нас транзакционное чтение) в рамках одного агрегата в рамках всего жизненного цикла данных, а не только для конкретного инстанса
источник

NF

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

SP

Sergey Protko in Software Design/Architecture/Zen
Агрегаты призваны гарантировать консистентности стэйта (присловутые инварианты) а потому если мы только читаем и стэйт не меняется в них нет особо смысла
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
* тут надо сделать оговорку, о том что на фронте и в системах с реактивностью вы можете так сделать, но это дурно пахнет(потому что инвариант будет соблюден постфактум при чтении, и может нарушить другие, а значит вы сильно свяжите чтение и запись, это может привести к рекурсивным и абсолютно не прозрачным обновлениям, если у вас не акторы или не строгая согласованность вы захлебнётесь пытаясь понять что произошло)
источник

E

Emanresun in Software Design/Architecture/Zen
спасибо принял, вот эти документашки нормальные для изучения?
https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/ddd-oriented-microservice
источник

E

Emanresun in Software Design/Architecture/Zen
источник

SP

Sergey Protko in Software Design/Architecture/Zen
есть нюансы
источник