我的 DDD 有问题。我刚开始使用它,所以我没有很多经验。有两个有界上下文:维护和客户端。每个客户都有一个引擎部件的列表。维修中存储了从事维修工作的公司。客户可以为每个部分选择首选公司。
管理员可以暂停公司。两个聚合有变化。首先,它会改变公司状态,并且应该从喜欢它的客户中删除下一家公司。处理它的最佳模式是什么?我可以在聚合中创建两个处理程序,但是当其中一个处理程序抛出异常时,我如何回滚更改?
问问题
625 次
1 回答
0
看起来您需要修改聚合中的一致性边界。
但是如果在修改之后您仍然需要在一个事务中更改两个聚合,您可以考虑最终一致的系统并使用域事件(但是在 CQRS 中您已经这样做了,不是吗?)。
Vaughn Vernon 在他的“实施领域驱动设计”一书中提出了下一种实现最终一致性的方法:聚合发布领域事件,该事件被交付给一个或多个订阅者。每个订阅者都在其自己的事务中执行(因此您仍然在事务中更改一个聚合)。如果事务失败(订阅者在超时时间内未确认成功)再次聚合发送消息或执行一些回滚例程。
由于您使用的是事件溯源,您可以将“失败”事件标记为已拒绝并使用Fowler 的追溯事件机制。
于 2013-02-18T13:01:26.787 回答