您能告诉我您认为哪一层是在DDD中放置域事件处理程序的正确层吗?例如,我有一个应用程序服务来添加一个新的合同,我想发送一个电子邮件通知给联系人,当合同添加了,那么电子邮件发件人(负责处理ContractAdded事件)应用程序服务或域服务还是其他什么?
发布于 2016-12-01 16:41:30
我将域事件处理程序放置在应用层。
域事件是一种告诉外部层(或外部世界)域层中发生了什么的方法。如何处理事件取决于应用程序。应用程序可以将更改通知用户,也可以调用另一个域来做一些事情。应用程序负责在用户操作、web请求或域事件的反应中编排域操作。
发布于 2018-08-03 19:57:32
我将域事件处理程序作为域接口IDomainEventHandler放在域层中。
域事件处理程序的一个示例是订阅特定域事件以初始化新事务的策略(例如:为了触发新的域命令),因此在域层中使用它是有意义的,因为它与业务逻辑相关。
我们可以想到一个例子,其中一个订单被确认,因此应该创建一个发票请求。我们有一个事件OrderConfirmedEvent已经发生了。我们域中的策略将负责订阅此事件并创建域命令RequestInvoice,该命令将由命令处理程序处理,并由其相应处理。
如果我们在应用层中有这个事件处理程序,这意味着除了编排用户的操作之外,应用程序层还将执行一些业务逻辑,这似乎是不正确的。
不过,我们有
发布于 2016-08-04 02:46:49
最初的DDD书(Evans 2004)将应用层解释为一个薄薄的层,它对用户的操作进行域对象的操作。因此,域事件的典型事件处理程序不属于应用层。
在域层中放置其中一些可能是有意义的,只要您不通过创建一个向上的依赖关系来打破分层。
如果您有一个位于域层下面的基础结构层,则事件处理程序不能存在,因为它会破坏分层。
如果在域层之上有一个适配器层,则可以在那里创建一个事件处理程序。看看六角形建筑。
https://softwareengineering.stackexchange.com/questions/325996
复制相似问题