DDD(领域驱动设计)、领域服务和事件

4

情况:

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

从我的角度来看,这是一种非常方便的方法。但是,在领域服务中存在领域事件的情况下怎么办呢?

领域服务不应该有状态(无状态)。在这种情况下,理论上应该将IDispatcher事件分发器注入到这种服务的构造函数中。

问题:

为了避免将事件分发器引入到领域服务中,建议采用以下替代方法:

  1. 保存最后一个操作的事件在领域服务中。然而,这将违反领域服务无状态的原则。
  2. 根据操作结果从服务方法返回事件列表(在返回方法或其他方式中,具体取决于编程语言的能力)。
1个回答

4
注意:该帖子是五年前写的。您可能想查看他更近期(也更详细)的文章:《超越分布式事务:一个叛教者的实现》 领域服务不应该有状态,这是正确的。因此,在领域服务中为领域事件分配责任非常可疑。
您可能会使用领域服务来计算聚合的事件,但存储仍然属于聚合结构本身。所以,这可能看起来像一个函数(或者如果您喜欢的话,是领域服务上的方法),它接受由聚合提供的一些参数并返回事件。

非常感谢您的回答。让我们考虑以下示例。我们有一个jwt令牌。它是一个字符串。jwt可以序列化为JsonWebToken类。这个类是一个值对象。有一个领域服务JwtValidator,它处理jwt的验证。如果jwt无效,则应发生InvalidTokenFound事件。事件处理程序必须通过InvalidTokenFound事件中指定的tokenId删除相应的聚合令牌。 - Eladei
我理解得正确吗,JwtValidator与验证结果一起应返回InvalidTokenFound事件,该事件将被放置在聚合中或立即传递给IDispatcher? - Eladei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接