因此,让我们以通常的 Order 示例为例。假设有一个富域模型,我们有一个 Order.place() 调用。这些天来执行与此操作相关的其他任务的方法似乎指向域事件。因此,假设此调用触发了“OrderPlaced”事件。放置事件后通常发生的事情是我们发送一封确认电子邮件,因此我们为此事件创建一个事件侦听器,并发送一封电子邮件。
很简单:Order.place() > 引发 OrderPlaced 事件 > EmailForOrderPlaced 监听器触发 > 电子邮件被发送
我们还有以类似方式工作的注册(User.register() > UserRegistered event raises > Registration listener fires > Email gets sent)
然而:
问题(一个虚构的任务 - 不一定有意义 - 但是很多实际的业务需求无论如何都没有):
现在我们希望将注册+订单功能合二为一,与常规的每次注册一封电子邮件+一封订单电子邮件相反,我们只想发送一封包含两者的电子邮件。这是一个复杂的问题,因此通常我们会创建一个域服务来执行此操作,但是如果我们调用 User.register(); 订单.place(); 现在它将像往常一样触发 2 个事件,向客户发送垃圾邮件(好吧,不是真的,但这是一个示例)
那么我们如何解决这个问题呢?显然,发送合并的电子邮件不是问题,因为我们可以在服务中为此引发事件,但这仍然给我们留下了原始的 2 封电子邮件。如果我在执行 2 个调用之前分离服务中的 2 个侦听器,那实际上意味着我必须了解它们的功能,并且每次添加新的侦听器时,我都必须返回服务分离那个,等等,有没有更好的方法可以无缝地做到这一点?