1

一般问题:谁负责处理单个命令中包含的事件?

简化示例

给出了两个聚合:UserGame

要使用 - 命令启动 a GameStartGame两个Users 都必须接受。就我的域驱动解决方案而言,这会导致以下事件流:GameRequested->UserAcceptedUserRejected->GameStartedGameFailed

此事件流和相应的业务逻辑代码是领域的一部分,因此我想在领域层中规定该行为。但我经常看到应用程序层在聚合上完成所有事件处理和执行行为以弥合差距。应用程序层是否真的负责确定接下来必须调用哪个聚合(以及如何调用)以执行此GameStart命令过程(跨越多个聚合和事件)?

4

1 回答 1

1

应用程序层是否真的负责确定接下来必须调用哪个聚合(以及如何调用)以继续此 GameStart 命令过程(跨越多个聚合和事件)?

是的,但它不会经常出现。

基本前提是——从领域模型的角度来看,每个命令只修改一个聚合。这些命令通常存在于单个事务的范围内。

现在,也就是说,有几种模式,其中应用程序组件中处理的单个消息可能需要与域模型协调多个命令。

这样做的一个原因可能是复合用户界面 - 应用程序接收单个消息(FormSubmitted、HttpRequestReceived),并将该消息转换为针对不同服务调用的各种命令。请参阅 Udi Dahan 的节食活动

可能发生这种情况的另一个原因是,如果您试图保持与以前用于在单个聚合中处理消息的 api 的向后兼容性,现在在两个聚合中这样做。

实现这一点的一种方法是使用状态机。“流程管理器”是您有时会在文献中找到的术语。这只是一个协议的流行术语,用于跟踪已发生的事情以及接下来需要发生的事情。

于 2017-06-16T01:40:04.687 回答