让我们举一个有界上下文的基本例子:Ordering
,Payment
,Shipping
。让我们假设Order
有一个Order.Status
字段,它反映了Payment
BC的PaymentProcessed
事件和Shipping
BC的OrderShipped
事件。
当然,发货发生在付款之后,但PaymentProcessed
可能比OrderShipped
晚到达Order
BC,这最终会使Order.Status
设置为Payed
,而实际上它已经发货了。
如何处理?Order
BC是否应该有某种允许状态转换的状态机,以便Payed
永远不会覆盖Shipped
,或者是否有其他方法来处理它?
如果无法避免,您应该管理它。
当处理PaymentProcessed
事件时,你应该检查发货的是否已经到达,并适当地表现(这取决于你的域)。
状态机是实现这一点的方法之一,但我认为重要的是你的逻辑期望它们可以乱序。