В настоящее время у меня есть один поток событий на корневой агрегат и два корневых агрегата, Room
и RoomType
.
Поведение Room
зависит от того, что это за RoomType
. Чтобы разделить оба агрегата, RoomType
просто представлен как roomTypeId в агрегате Room
. Изменение RoomType
представлено событием RoomTypeChanged
.
RoomTypes
можно управлять отдельно, и он должен находиться в другом агрегате.
Теперь рассмотрим следующий вариант использования:
Когда пользователь аннулирует RoomType
, все Rooms
, у которых есть этот Roomtype
, должны переключиться на резервный вариант RoomType
.
Я думал о нескольких подходах, но все они кажутся проблематичными:
Пусть прослушиватель событий прослушивает
RoomTypeInvalidated
-событие и отправляетSwitchToFallbackRoomType
всемRoom
-агрегатам, которые имеют этоRoomtype
. Как бы я это сделал? Невозможно узнать, какие агрегаты имеют этотRoomtype
, если я не получу доступ к своей модели чтения, что кажется неправильным. Даже если бы я загружал все агрегаты, невозможно загрузить только агрегаты этого типа, поскольку я не могу загрузить подмножество всех потоков (используя geteventstore).При повторном применении событий
RoomTypeChanged
к агрегатуRoom
вместо того, чтобы просто применить его, проверьте, существует ли еще этотRoomType
, но опять же, как узнать, какиеRoomTypes
существуют (я был бы в той же ситуации, что и 1 , но перевернутый)? Кроме того, кажется неправильным вводить логику повторного применения событий, я думаю, они должны просто представлять изменения состояния.
Как бы вы решили это?