【发布时间】:2023-03-31 03:15:01
【问题描述】:
我目前每个聚合根和两个聚合根有一个事件流,Room 和 RoomType。
Room 的行为取决于 RoomType 它是什么。为了分离两个聚合,RoomType 仅表示为 Room 聚合中的 roomTypeId。 RoomType 的更改由 RoomTypeChanged 事件表示。
RoomTypes 可以单独管理,需要在不同的聚合中。
现在考虑以下用例:
当用户使RoomType 无效时,所有具有Roomtype 的Rooms 都应切换到备用RoomType。
我想过几种方法,但似乎都有问题:
让事件侦听器侦听
RoomTypeInvalidated-事件,并在所有具有Roomtype的Room-聚合上发送SwitchToFallbackRoomType。 我该怎么做呢?除非我访问我的 readmodel,否则无法知道哪些聚合具有Roomtype,这似乎不正确。 即使我要加载所有聚合,也无法仅加载该类型的聚合,因为我无法加载所有流的子集(使用 geteventstore)。当将
RoomTypeChanged-events 重新应用到Room聚合时,而不是仅仅应用它,请检查RoomType是否仍然存在,但话又说回来,我怎么知道哪个 @ 987654342@ 存在(我会处于与 1 相同的情况,但倒置)?此外,重新应用事件的逻辑似乎是错误的,我认为它们应该只代表状态变化。
你会怎么解决这个问题?
【问题讨论】:
标签: event-sourcing eventstoredb