我有DDD的问题。我刚开始使用它,所以我没有太多的经验。有两个有界的上下文:维护和客户端。每个客户端都有引擎的部件列表。从事维修的是以维修为职业的仓储公司。客户可以选择每个零件的首选公司。
管理员可以暂停公司。在两个聚合体中有变化。首先,它改变了公司的状态,下一家公司应该从喜欢它的客户中删除。处理它的最佳模式是什么?我可以在聚合中创建两个处理程序,但是当其中一个处理程序抛出异常时,我如何回滚更改?
发布于 2013-02-18 21:01:27
看起来您需要修改聚合中的一致性界限。
但是,如果在修改之后,您仍然需要在一个事务中更改两个聚合,您可以考虑最终一致的系统和使用域事件(但在CQRS中,您已经这样做了,不是吗?)。
Vaughn Vernon在他的书"Implementing Domain-Driven Design“中建议了处理最终一致性的下一种方法:聚合发布域事件,该事件被传递给一个或多个订阅者。每个订阅者都在它自己的事务中执行(因此您仍然在事务中更改一个聚合)。如果事务失败(订阅者未在超时时间内确认成功),则再次聚合、发送消息或执行一些回滚例程。
由于您使用的是Event Sourcing,因此您可以将“失败”事件标记为rejected并使用Fowler's Retroactive Event mechanism。
https://stackoverflow.com/questions/14922051
复制相似问题