DDD、领域服务和事件

DDD, Domain Services and Events

情况:

为了处理域事件,Jimmy Bogart proposed 一种在聚合中存储事件的方法。

在我看来,这是一种非常方便的方法。但是,领域服务中发生领域事件的情况呢?

域服务不应该有状态(stateless)。在这种情况下,理论上,IDispatcher 事件调度程序必须注入到此类服务的构造函数中。

问题:

为避免引入事件调度程序的域服务,建议的替代方法是正确的:

  1. 在域服务中保存上次操作的事件。但是,这将违反域服务的无状态原则。
  2. Return 基于服务方法的事件列表 操作结果(在 return 方法或其他方式中, 取决于编程语言的能力)。

注意:post 大约是五年前写的。你可能想回顾一下他最近的(也更详细):Life Beyond Distributed Transactions: An Apostate's Implementation

Domain Service should not have a state

正确 - 因此,您想要在域服务中分配域事件的责任是非常可疑的。

您可以使用域服务为聚合计算 事件,但存储仍属于聚合结构本身。所以这可能看起来像一个函数(或者,如果你愿意,域服务上的一个方法)接受聚合和 returns 事件提供的一些参数。