【发布时间】:2020-11-05 22:27:51
【问题描述】:
我很难找到并实施以下问题的最佳实践:引发create域事件(通知创建聚合的事件)的最佳位置在哪里。例如,如果我们在有界上下文中有 订单聚合,我们希望在创建订单时通知所有相关方。该事件可能是 OrderCreatedEvent。
我首先尝试的是在构造函数中引发此事件(我在每个聚合中都有一个域事件集合)。这样只有在我们创建订单时才可以。因为当我们将来想对这个聚合做任何事情时,我们将通过构造函数创建它的新实例。然后 OrderCreatedEvent 将再次引发,但它不是真的。
但是,我认为在应用层引发事件是可以的,但这是一种反模式(域事件应该只存在于域中)。也许有一个方法 Create 只会将 OrderCreatedEvent 添加到其域事件列表中,并在创建订单时在应用程序层调用它是一种选择。
我在互联网上发现的有趣事实是,在构造函数中引发域事件是一种反模式,这意味着最后描述的选项(具有 Create 方法)将是最好的方法。
我将 Spring Boot 用于应用程序,将 MapStruct 用于将 数据库/存储库实体 映射到域模型聚合的映射器。此外,试图找到一种方法来创建一个映射器,该映射器将跳过目标类的构造函数,但由于 Order 聚合的所有属性都是私有的,这似乎是不可能的。
【问题讨论】:
标签: spring-boot domain-driven-design mapstruct