В (полученном событием) CQRS Вам нужен глобальный счетчик последовательности, в конечном счете хранят?

В попытке получить мою голову вокруг CQRS (и DDD в целом) я столкнулся с ситуациями, когда два события имеют место на различных агрегатах, но порядок их имеет доменное значение. Раз так затем они могли произойти так близко друг к другу, что метка времени (как используется демонстрационными реализациями, которые я видел) не может дифференцировать их, означая, что хранилище события не содержит 'полное' представление домена, поскольку существует неоднозначность по порядку, в котором события имели место.

Как пример, домен мог запустить a CustomerCreatedEvent который относится Customer агрегат, и затем a CustomerAssignedToAgent событие на Agent агрегат. CustomerAssignedToAgent событие не имеет смысла, если это происходит перед CustomerCreatedEvent, но обычно оба из них могли бы быть запущены в результате одной операции, которая делает его, вероятно, что метки времени эффективно были бы тем же.

Таким образом, я просто моделирую вещи плохо? Должна когда-либо быть ситуация, где последовательность событий через различные агрегаты важна? Или необходимо ли сохранить глобальный порядковый номер на хранилище события, так, чтобы можно было определить точную последовательность, в которой события имели место?

5
задан Jon M 1 June 2010 в 09:21
поделиться

2 ответа

В целом, это плохая идея - навязывать глобальный порядок. Агрегаты предназначены для формирования границ ACID-семантики.

Это означает, что два агрегата не должны обновляться в одной транзакции, и нет другого способа обеспечить глобальный порядок.

В вашем случае может иметь смысл, что вместе с созданием CustomerCreatedEvent Customer должен послать сообщение агрегату Agent с указанием назначить себя. Как правило, межагрегатное взаимодействие должно осуществляться посредством обмена сообщениями.

5
ответ дан 13 December 2019 в 19:22
поделиться

Я также нашел этот пост Грега Янга в списке Yahoo domaindrivendesign:

Порядок гарантируется только для обработчика в пределах совокупной корневой границы.

Нет гарантии порядка между обработчиками или агрегатами.

Попытка предоставить все это ведет к темной стороне.

6
ответ дан 13 December 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: