域事件在 DDD 中是众所周知的,可以在聚合根或域服务中发布。我的问题是,域事件可以在应用服务/用例中发布吗?
例如,简化。我有一个名为 UseCaseA
的应用程序服务,它执行调用某些聚合根的各种操作。如果我想在此用例结束时引发事件,我可以在此应用程序服务中发布 UseCaseAFinished
事件吗?它是领域事件还是我们应该称之为应用程序事件? DDD 中是否存在应用程序事件术语?
提前致谢。
最佳答案
我觉得你应该换个角度来看这个。让我解释。
与其引发事件作为 UseCaseA 的结果来处理副作用(例如发送电子邮件),不如引发事件,但您想要引发的事件仍应像您描述的那样是领域事件。
然后在处理这个特定领域事件时,您可以引发一个“应用程序事件”(我称它们为集成事件),然后处理发送电子邮件、进行监控、记录日志等副作用。
此集成事件可以跨越多个 BC、服务甚至应用程序。
分步流程示例:
- 开始执行UseCaseA
- 对实体执行操作、更改状态等。
- 从域中引发域事件
- 在 UseCaseA 执行结束之前调度域事件
- 在一个或多个域事件处理程序中捕获域事件
- 在其中一个处理程序中,引发一个集成事件来处理“应用程序范围”的副作用
- 在 Integration Event Handler 中处理集成事件并发送电子邮件、进行日志记录、通知监控等。
集成事件可以通过多种方式分派(dispatch),但通常是通过某种事件总线。
关于domain-driven-design - DDD 中是否存在应用程序事件术语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62054009/