我在以下问题中苦苦寻找和实施最佳实践:在哪里提出创建领域事件(通知聚合物创建的事件)最为合适。例如,如果我们在有界上下文中有“订单聚合”,我们希望在创建订单时通知所有感兴趣的方。事件可以是“OrderCreatedEvent”。
我首先尝试在构造函数中提出此事件(每个聚合都有一个领域事件集合)。这种方法只适用于创建订单时。因为当我们将来想要对此聚合进行任何操作时,我们将通过构造函数创建新实例。然后,“OrderCreatedEvent”将再次被提出,但这是不正确的。
但是,我认为在应用程序层中提高事件是一种反模式(领域事件应仅存在于域中)。也许拥有一个“Create”方法,只需将“OrderCreatedEvent”添加到其域事件列表中,并在创建订单时在应用程序层调用它是一种选择。
我在互联网上发现的有趣事实是,在构造函数中引发域事件是一种反模式,这意味着最后描述的选项(拥有“Create method”)将是最佳方法。
我正在使用Spring Boot应用程序和MapStruct映射器将数据库/存储库实体映射到域模型聚合。还试图找到一种方法创建一个映射器,可以跳过目标类的构造函数,但由于订单聚合的所有属性都是私有的,因此似乎是不可能的。
我首先尝试在构造函数中提出此事件(每个聚合都有一个领域事件集合)。这种方法只适用于创建订单时。因为当我们将来想要对此聚合进行任何操作时,我们将通过构造函数创建新实例。然后,“OrderCreatedEvent”将再次被提出,但这是不正确的。
但是,我认为在应用程序层中提高事件是一种反模式(领域事件应仅存在于域中)。也许拥有一个“Create”方法,只需将“OrderCreatedEvent”添加到其域事件列表中,并在创建订单时在应用程序层调用它是一种选择。
我在互联网上发现的有趣事实是,在构造函数中引发域事件是一种反模式,这意味着最后描述的选项(拥有“Create method”)将是最佳方法。
我正在使用Spring Boot应用程序和MapStruct映射器将数据库/存储库实体映射到域模型聚合。还试图找到一种方法创建一个映射器,可以跳过目标类的构造函数,但由于订单聚合的所有属性都是私有的,因此似乎是不可能的。