DDD、领域服务和事件
DDD, Domain Services and Events
情况:
为了处理域事件,Jimmy Bogart proposed 一种在聚合中存储事件的方法。
在我看来,这是一种非常方便的方法。但是,领域服务中发生领域事件的情况呢?
域服务不应该有状态(stateless)。在这种情况下,理论上,IDispatcher 事件调度程序必须注入到此类服务的构造函数中。
问题:
为避免引入事件调度程序的域服务,建议的替代方法是正确的:
- 在域服务中保存上次操作的事件。但是,这将违反域服务的无状态原则。
- Return 基于服务方法的事件列表
操作结果(在 return 方法或其他方式中,
取决于编程语言的能力)。
注意:post 大约是五年前写的。你可能想回顾一下他最近的(也更详细):Life Beyond Distributed Transactions: An Apostate's Implementation
Domain Service should not have a state
正确 - 因此,您想要在域服务中分配域事件的责任是非常可疑的。
您可以使用域服务为聚合计算 事件,但存储仍属于聚合结构本身。所以这可能看起来像一个函数(或者,如果你愿意,域服务上的一个方法)接受聚合和 returns 事件提供的一些参数。
情况:
为了处理域事件,Jimmy Bogart proposed 一种在聚合中存储事件的方法。
在我看来,这是一种非常方便的方法。但是,领域服务中发生领域事件的情况呢?
域服务不应该有状态(stateless)。在这种情况下,理论上,IDispatcher 事件调度程序必须注入到此类服务的构造函数中。
问题:
为避免引入事件调度程序的域服务,建议的替代方法是正确的:
- 在域服务中保存上次操作的事件。但是,这将违反域服务的无状态原则。
- Return 基于服务方法的事件列表 操作结果(在 return 方法或其他方式中, 取决于编程语言的能力)。
注意:post 大约是五年前写的。你可能想回顾一下他最近的(也更详细):Life Beyond Distributed Transactions: An Apostate's Implementation
Domain Service should not have a state
正确 - 因此,您想要在域服务中分配域事件的责任是非常可疑的。
您可以使用域服务为聚合计算 事件,但存储仍属于聚合结构本身。所以这可能看起来像一个函数(或者,如果你愿意,域服务上的一个方法)接受聚合和 returns 事件提供的一些参数。