我有一个问题如何处理一个传奇,其中使 的决定取决于创建传奇之前所公布的一个事件。佐贺依赖于事件从过去
这是说明我的问题的示例:
想象我有一个CustomerAR和OrderAR。当customerAR是 创建了一个验证过程开始,这个过程的结果是 量的订单,客户是免费无特殊 授权的花费。我不会详细讨论这个过程,因为 它与上下文无关。在计算金额时,命令将以计算的金额 发送到CustomerAR,并且客户AR 发布具有该值的事件(CustomerMaxOrderAmountEvent)。所以 非常好。
然后几个星期后,客户下了订单。 OrderAR是 创建并启动我的OrderSaga。该事件等待,直到完全创建订单 ,然后必须作出决定是否需要为该订单发送 AutorizationCommand。要做出该决定,必须知道如果CustomerMaxOrderAmountEvent已发布且值为 的金额为 。通常OrderSaga也会订阅 CustomerMaxOrderAmountEvent,但问题是这个事件永远不会发生,因为它已经在过去发生过。
我应该如何处理这个问题。我应该查询读取模型知道 价值,我应该发送一个命令来获取值,我应该做一个 参考CustomerAR,我要重播所有的历史事件 传奇,所以他知道历史了。
UPDATE
请注意,这是关于这个概念不是这个具体的例子。这个例子纯粹是为了澄清问题:“两个不相关的聚合根不属于同一个有界的上下文。”
感谢您的帮助。
梅尔文
谢谢你的回答。我同意这是针对这种特定情况的可能解决方案。但是,当两个聚合根不属于相同的有界环境或不具有直接关系时,情况如何呢?首先这是不可能的,但我们也希望在事件中放入不相关的数据,因为一些传奇需要这些数据。根据DDD,我不应该由谁来监听或处理事件来考虑我的AR。它应该提供与事件相关的数据而不是事件的处理者。 – llMll
我已更新我的回答以反映您的评论。 – kstaruch
我同意你的第二个选择。这实际上是我现在正在做的事情,但不知何故是不正确的,但我可能是错的。我也同意这样的事实,即我必须根据事件中的数据做出决定,但这是我想要的。只有这个活动在过去发表过。我不能完全遵循你关于多重传奇的观点,以及这将如何在这种情况下有所帮助。我仍然必须根据不包含我需要做出该决定的数据的事件做出决定。我希望你能为我清除最后一点。 – llMll