DDD 中是否存在应用程序事件术语?

Mr.*_*ars 6 domain-driven-design terminology domain-events

领域事件在 DDD 中众所周知,可以在聚合根或领域服务中发布。我的问题是,域事件可以在应用程序服务/用例中发布吗?

例如,简化。我有一个名为 的应用程序服务UseCaseA,它执行调用一些聚合根的各种操作。如果我想在该用例结束时引发一个事件,我可以UseCaseAFinished在此应用程序服务中发布该事件吗?它是领域事件还是应该称为应用程序事件?DDD 中是否存在应用程序事件术语?

提前致谢。

Voi*_*son 5

领域事件可以在应用程序服务/用例中发布吗?

通常不是:领域信息属于领域模型,而不属于应用程序。

现在,业务对流程的进展/终止感兴趣是很正常的。但这只是一条线索,表明流程本身应该在领域中建模。

“应用程序事件”更有可能致力于应用程序问题:想想“可观察性”。


小智 3

我认为你应该从另一个角度来看待这个问题。让我解释。

您想要引发的事件仍然应该是您所描述的域事件,而不是引发事件作为您的 UseCaseA 的结果来处理副作用(例如发送电子邮件)。

然后,在处理这个特定的领域事件时,您可以引发一个“应用程序事件”(我称之为集成事件),然后它将处理发送电子邮件、进行监视、日志记录的副作用。

此集成事件可以跨越多个 BC、服务甚至应用程序。

分步流程示例:

  1. 开始执行UseCaseA
  2. 对实体执行操作,更改状态等。
  3. 从域引发域事件
  4. 在执行 UseCaseA 即将结束之前调度域事件
  5. 在一个或多个域事件处理程序中捕获域事件
  6. 在这些处理程序之一中,引发集成事件来处理“应用程序范围”的副作用
  7. 在集成事件处理程序中处理集成事件并发送电子邮件、进行日志记录、通知监控等。

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