gpt4 book ai didi

event-sourcing - 聚合间通信

转载 作者:行者123 更新时间:2023-12-03 17:48:13 25 4
gpt4 key购买 nike

我目前每个聚合根和两个聚合根都有一个事件流,RoomRoomType .
Room 的行为取决于什么 RoomType这是。为了分离两个聚合体,RoomType仅表示为 Room 中的 roomTypeId总计的。 RoomType的变化由 RoomTypeChanged 表示事件。
RoomTypes可以单独管理并且需要在不同的聚合中。

现在考虑以下用例:

当用户使 RoomType 无效时, 全部 Rooms有那个 Roomtype应该切换到后备 RoomType .

我想过几种方法,但似乎所有方法都有问题:

  • 让事件监听器监听 RoomTypeInvalidated -event,并发送 SwitchToFallbackRoomType在所有 Room -具有该 Roomtype 的聚合体.
    但是我该怎么做呢?无法知道哪些聚合具有该 Roomtype除非我访问我的 readmodel,这似乎不正确。
    即使我要加载所有聚合,也无法仅加载该类型的聚合,因为我无法加载所有流的子集(使用 geteventstore)。
  • 重新申请时RoomTypeChanged -事件到 Room聚合,而不是仅仅应用它,检查是否 RoomType仍然存在,但话说回来,我怎么知道是哪个 RoomTypes存在(我的情况与 1 相同,但倒过来了)?此外,在重新应用事件上加入逻辑似乎是错误的,我认为它们应该只代表状态变化。

  • 你会如何解决这个问题?

    最佳答案

    我们正在处理同样的问题,还有房间和房型。您遇到问题的解决方案可能是从关系映射而来的,而这不是问题。在一个非常数据驱动的领域中开始思考行为是困难和困惑的。
    我认为要解决问题,您必须挑战所提出的解决方案。

    重新思考后,我们最终得到了 RoomAssignment 和 RoomAllocationSchedule 等聚合,并发现 RoomType 主要用于将房间特征传达给外部 channel /OTA。

    对我们需要的行为进行建模真的很有帮助(因为一致性边界开始变得有意义),而不是对数据进行建模并试图对其实现关系一致的行为......

    当我们真的需要跨聚合的一致性时,我们对本身在事务上一致的流程管理器/传奇进行建模,并向聚合发送消息。因此,我们有一个“RoomAssignmentDirector”聚合,它确保在分配给房间之前房间被分配给房间等等。

    希望能帮助到你。

    关于event-sourcing - 聚合间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28500250/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com