DDD 中是否存在应用程序事件术语?
Does exist application event term in DDD?
域事件在 DDD 中是众所周知的,可以在聚合根或域服务中发布。我的问题是,域事件可以在应用 services/use 个案例中发布吗?
例如,简化。我有一个名为 UseCaseA
的应用程序服务,它执行调用某些聚合根的各种操作。如果我想在此用例结束时引发事件,我可以在此应用程序服务中发布 UseCaseAFinished
事件吗?它是领域事件还是我们应该称之为应用程序事件? DDD 中是否存在应用程序事件术语?
提前致谢。
Can domain events be published in application services/use cases?
通常不是:域信息属于域模型,不属于应用程序。
现在,业务对流程的progress/termination感兴趣是很正常的。但这只是表明过程本身应该也在域中建模的线索。
"Application events" 更可能专注于应用程序问题:想想 "observability".
我觉得你应该换个角度来看这个。让我解释。
与其引发事件作为 UseCaseA 的结果来处理您的副作用,例如发送电子邮件,您想要引发的事件仍然应该是您描述的领域事件。
然后在处理这个特定领域事件时,您可以提出一个 "Application event"(我称它们为集成事件),然后处理发送电子邮件、进行监控、记录日志的副作用。 .
此集成事件可以跨越多个 BC、服务甚至应用程序。
分步流程示例:
- 开始执行UseCaseA
- 对实体执行操作、更改状态等
- 从域中引发域事件
- 在 UseCaseA 执行结束前调度域事件
- 在一个或多个域事件处理程序中捕获域事件
- 在其中一个处理程序中,引发一个集成事件来处理 "application wide" 副作用
- 在 Integration Event Handler 中处理集成事件并发送电子邮件、进行日志记录、通知监控等
可以通过多种方式分派集成事件,但通常是通过某种事件总线。
域事件在 DDD 中是众所周知的,可以在聚合根或域服务中发布。我的问题是,域事件可以在应用 services/use 个案例中发布吗?
例如,简化。我有一个名为 UseCaseA
的应用程序服务,它执行调用某些聚合根的各种操作。如果我想在此用例结束时引发事件,我可以在此应用程序服务中发布 UseCaseAFinished
事件吗?它是领域事件还是我们应该称之为应用程序事件? DDD 中是否存在应用程序事件术语?
提前致谢。
Can domain events be published in application services/use cases?
通常不是:域信息属于域模型,不属于应用程序。
现在,业务对流程的progress/termination感兴趣是很正常的。但这只是表明过程本身应该也在域中建模的线索。
"Application events" 更可能专注于应用程序问题:想想 "observability".
我觉得你应该换个角度来看这个。让我解释。
与其引发事件作为 UseCaseA 的结果来处理您的副作用,例如发送电子邮件,您想要引发的事件仍然应该是您描述的领域事件。
然后在处理这个特定领域事件时,您可以提出一个 "Application event"(我称它们为集成事件),然后处理发送电子邮件、进行监控、记录日志的副作用。 .
此集成事件可以跨越多个 BC、服务甚至应用程序。
分步流程示例:
- 开始执行UseCaseA
- 对实体执行操作、更改状态等
- 从域中引发域事件
- 在 UseCaseA 执行结束前调度域事件
- 在一个或多个域事件处理程序中捕获域事件
- 在其中一个处理程序中,引发一个集成事件来处理 "application wide" 副作用
- 在 Integration Event Handler 中处理集成事件并发送电子邮件、进行日志记录、通知监控等
可以通过多种方式分派集成事件,但通常是通过某种事件总线。