DDD:最终的一致性和1到n个关系

时间:2018-01-11 09:05:32

标签: domain-driven-design

在我的域中,我有产品和订单汇总。订单参考产品。这是1到n的关系,因此产品有许多订单和订单属于产品。停止产品时,将发布ProductDiscontinued事件,并且必须取消属于该产品的所有订单。所以有一个适配器通过RabbitMQ接收ProductDiscontinued事件。然后,适配器将取消订单委托给应用程序服务。如何在单个交易中取消单个订单?适配器是否应该迭代已停产产品的所有订单并为每个订单调用应用程序服务?我是否应该忽略我在单个事务中修改多个聚合并使用所有受影响的OrderId列表调用应用程序服务一次?有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

从DDD的角度来看,Aggregate是事务边界。事务不大于Aggregate。存在此规则是为了强制一个人正确设计聚合,而不依赖于在同一事务中修改的多个聚合。

但是,您已经设计了您的聚合物(从我可以看到)。

  

适配器是否应该迭代已停产产品的所有订单并为每个订单调用应用程序服务?

这是正常的做事方式。

  

我是否应该忽略我在单个事务中修改多个聚合并使用所有受影响的OrderId列表调用应用程序服务一次?

在我之前写的内容中,你可能这样做,如果它以某种方式提供更好的性能(我不知道更大的事务如何能提供更好的性能但是嘿,这取决于代码也)。