在使用事件来源的汇总后端的基于DDD原则的环境中,应如何分离
aggregate roots(AR)?
例如,我有一个设备聚合根(AR),其具有负责创建预订AR的工厂方法。预订是人员AR和设施AR的时间敏感组合。一个人只能在一个设施中预订。
在DDD中,我会参考“个人预订”和“设施中的人”。然而,当生成用于事件采购的事件时,我认为尝试处理从后端反序列化的事件将变得令人望而却步。因此,我只采取了对基于值对象的唯一标识的引用。这带来了一个新的问题,但是当AR上的一个方法需要在另一个AR上调用另一个方法时 – 如何处理这种情况?从域AR中点击事件源存储库?
在这种情况下的一般用例是什么?我接近这个错了吗?
聚合根边界定义一致性边界。
在总体内,一致性得到保证。
外面…不是
所以你不应该有跨越几个聚合的操作,并且必须一致。
如果您需要跨越两个聚合的事务,则应查看您的聚合边界。
在总体内,一致性得到保证。
外面…不是
所以你不应该有跨越几个聚合的操作,并且必须一致。
如果您需要跨越两个聚合的事务,则应查看您的聚合边界。
对于在聚合之外发生的事情,您应该有一个事件处理程序将向其他聚合发送命令。如果聚合之间的动作逻辑更加复杂,那么可以定义一个进程,一个状态机,它将侦听事件并发送命令到聚合。流程可用于定义长时间运行的事务(具有补偿而不是回滚),或者基于大规模(即使在有界上下文之间)发生的事情做出业务决策。