如何处理潜在的域(集成)事件顺序混乱?



让我们举一个有界上下文的基本例子:Ordering,Payment,Shipping。让我们假设Order有一个Order.Status字段,它反映了PaymentBC的PaymentProcessed事件和ShippingBC的OrderShipped事件。

当然,发货发生在付款之后,但PaymentProcessed可能比OrderShipped晚到达OrderBC,这最终会使Order.Status设置为Payed,而实际上它已经发货了。

如何处理?OrderBC是否应该有某种允许状态转换的状态机,以便Payed永远不会覆盖Shipped,或者是否有其他方法来处理它?

如果无法避免,您应该管理它。
当处理PaymentProcessed事件时,你应该检查发货的是否已经到达,并适当地表现(这取决于你的域)。
状态机是实现这一点的方法之一,但我认为重要的是你的逻辑期望它们可以乱序。

最新更新