如何处理 DDD 中聚合之间的最终一致性故障



假设我正在使用C#和实体框架实现领域驱动设计。

我的代码的结构使得每个聚合在 EF 中都有自己的数据库上下文,以尊重聚合周围的事务边界原则。

聚合 1(库存聚合)

和聚合 2(订单聚合)正在由某个业务流程 AddItemToOrder 进行更新。

在 OrderAggregate 添加项目后,它会触发一个域事件 ItemAddToOrder,该事件由 InventoryAggregate 侦听,然后执行一些业务流程 SubQuantityFromInventory。

InventoryAggregate 无法减去库存,并触发一个域事件 NotEnoughInventory,由 OrderAgrated 侦听。

然后,OrderAggregate 尝试从订单中删除该项目,但失败。

现在订单中有一件商品不应该是,因为我们实际上没有足够的库存来销售该商品。

应该如何处理?

你描述的是一个进程管理器。 您可能需要某种OrderProcessQuoteProcess AR 来处理进程的状态。 如果您需要执行一些业务验证,例如首先检查库存,那么您需要有一个流程管理器,以便只有在确定确实可以提交后才能创建实际Order

关于如何处理某些项目的规则可能不像删除项目那么简单,即使在您的情况下,这可能是您需要做的。 您可能需要向用户显示一个或多个选项的数据。 一种可能是在提交订单之前删除该商品,另一种可能是将其放在延期交货的订单上。

最新更新