域驱动设计 – CQRS DDD事件采购中的总体间通信

在使用事件来源的汇总后端的基于DDD原则的环境中,应如何分离 aggregate roots(AR)?

例如,我有一个设备聚合根(AR),其具有负责创建预订AR的工厂方法。预订是人员AR和设施AR的时间敏感组合。一个人只能在一个设施中预订。

在DDD中,我会参考“个人预订”和“设施中的人”。然而,当生成用于事件采购的事件时,我认为尝试处理从后端反序列化的事件将变得令人望而却步。因此,我只采取了对基于值对象的唯一标识的引用。这带来了一个新的问题,但是当AR上的一个方法需要在另一个AR上调用一个方法时 – 如何处理这种情况?从域AR中点击事件源存储库?

在这种情况下的一般用例是什么?我接近这个错了吗?

聚合根边界定义一致性边界。
在总体内,一致性得到保证。
外面…不是
所以你不应该有跨越几个聚合的操作,并且必须一致。
如果您需要跨越两个聚合的事务,则应查看您的聚合边界。

对于在聚合之外发生的事情,您应该有一个事件处理程序将向其他聚合发送命令。如果聚合之间的动作逻辑更加复杂,那么可以定义一个进程,一个状态机,它将侦听事件并发送命令到聚合。流程可用于定义长时间运行的事务(具有补偿而不是回滚),或者基于大规模(即使在有界上下文之间)发生的事情做出业务决策。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...