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、服务甚至应用程序。

分步流程示例:

  1. 开始执行UseCaseA
  2. 对实体执行操作、更改状态等
  3. 从域中引发域事件
  4. 在 UseCaseA 执行结束前调度域事件
  5. 在一个或多个域事件处理程序中捕获域事件
  6. 在其中一个处理程序中,引发一个集成事件来处理 "application wide" 副作用
  7. 在 Integration Event Handler 中处理集成事件并发送电子邮件、进行日志记录、通知监控等

可以通过多种方式分派集成事件,但通常是通过某种事件总线。