gpt4 book ai didi

domain-driven-design - CQRS + DDD + 事件溯源中的聚合间通信

转载 作者:行者123 更新时间:2023-12-03 10:36:36 24 4
gpt4 key购买 nike

应该如何分开aggregate roots (AR) 在基于 DDD 原则的环境中使用事件源聚合后端相互通信?

例如,我有一个 Facility聚合根 (AR),它有一个工厂方法负责创建 Booking应收账款。 BookingPerson 的时间敏感组合AR 和 Facility应收账款。一个 Person只能单次预订Facility .

在 DDD 中,我会引用 BookingPerson , 和 PersonFacility .但是,在生成用于事件源的事件时,我认为尝试从后端处理事件反序列化将变得令人望而却步。因此,我只保留对基于值对象的唯一 id 的引用。然而,这带来了一个新问题,当一个 AR 上的方法需要调用另一个 AR 上的另一个方法时——你如何处理这种情况?从域 AR 命中事件源存储库?

这种情况下的一般用例是什么?我这样做是错的吗?

最佳答案

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

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

关于domain-driven-design - CQRS + DDD + 事件溯源中的聚合间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3104978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com