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

时间:2011-08-04 07:46:22

标签: c# domain-driven-design

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

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

由于

约翰

3 个答案:

答案 0 :(得分:1)

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

换句话说,在此bounded context中,Application应该是ApplicationGroup的孩子,而ApplicationGroup.CreateSettings()应该将设置传播到其子应用程序。

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

答案 1 :(得分:0)

John,我不知道DDD中有什么可以解释你的问题。这实际上是Event Driven Architecture(EDA)和Command Query Responsibility Segregation(CQRS)的问题。

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

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

答案 2 :(得分:0)

你不应该这样做,因为它会导致代码混乱。相反,使用sagas进行编排。 Here is还有很好的视频来自AndreasÖhlund关于NServiceBus的传奇。