DDD,可以聚合处理来自另一个聚合的事件

本文关键字:另一个 事件 处理 DDD | 更新日期: 2023-09-27 18:04:22

处理从另一个聚合发布的聚合中的事件是否正确?或者一个域应该只处理命令?

在我的例子中,我有一个管理设置的应用程序。我有一个用于application的聚合和一个用于applicationGroup的聚合。当我想为一组特定的应用程序创建设置时,命令由我的applicationGroup处理,然后applicationGroup发布一个事件GroupSettingsCreated,但是DDD说我们可以直接在我的ApplicationAggregate中处理这个事件吗?或者我应该在事件处理程序中处理此事件,将其映射到命令中,然后将其发送到我的ApplicationAggregate ?

感谢约翰

DDD,可以聚合处理来自另一个聚合的事件

如果您想在另一个聚合中处理一个聚合的事件,则该处理程序应该是生成该事件的聚合的子处理程序。

换句话说,在这个有界的上下文中,Application应该是ApplicationGroup的子应用程序,而ApplicationGroup.CreateSettings()应该将设置传播给它的子应用程序。

另一种思考方式:"应用程序组"可能不是一个真正的聚合——而是用户界面提供的一种便利。

John,我不知道DDD中有什么能回答你的问题。这实际上是一个事件驱动架构(EDA)和命令查询责任分离(CQRS)的问题。

为了给出更具体的建议,我想知道application和applicationGroup实体扮演什么角色。顺便说一句,它们听起来更像是应用程序/基础设施概念,而不是领域概念。

一般来说,我使用从源逻辑上推送下一个操作的命令(下一个操作是必要的下一步)。当所讨论的动作在逻辑上是对上游行为的反应(上游代码不知道对刚刚发生的事情的反应)时,我使用事件。

您不应该这样做,因为这会导致代码混乱。相反,应该使用传奇进行编排。这也是Andreas Öhlund关于NServiceBus中的saga的好视频