在 DDD 文献中,返回域事件模式被描述为管理域事件的一种方式。从概念上讲,聚合根保留了一个域事件列表,当您对其执行某些操作时会填充该列表。
当聚合根上的操作完成时,数据库事务在应用服务层完成,然后应用服务迭代域事件,调用事件调度器来处理这些消息。
我的问题是关于我们现在应该如何处理交易。Event Dispatcher 是否应该负责为其处理的每个事件管理新事务?或者应用程序服务是否应该在它调用域事件调度程序的域事件迭代中管理事务?当调度程序使用像 RabbitMQ 这样的基础结构机制时,这个问题是无关紧要的,但是当域事件在进程内处理时,它就是。
与我的问题相关的子问题。您对使用 ORM 挂钩(即:NHibernate 的 IPostInsertEventListener、IPostDeleteEventListener、IPostUpdateEventListener)在聚合根上而不是在应用程序服务中手动执行域事件迭代有什么看法?它是否增加了太多的耦合?是否更好,因为它不需要在每个用例中编写相同的代码(域事件在聚合上循环,如果它不在调度程序内部,则可能创建新事务)?