domain-driven-design - DDD 中是否存在应用程序事件术语?

标签 domain-driven-design terminology domain-events

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

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

提前致谢。

最佳答案

我觉得你应该换个角度来看这个。让我解释。

与其引发事件作为 UseCaseA 的结果来处理副作用(例如发送电子邮件),不如引发事件,但您想要引发的事件仍应像您描述的那样是领域事件。

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

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

分步流程示例:

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

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

关于domain-driven-design - DDD 中是否存在应用程序事件术语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62054009/

相关文章:

c# - C# 中 DSL/自定义类型的工具包?

terminology - 静态/动态与强/弱

python - Python 上下文中的运行时是什么?它由什么组成?

c - C语言中变量和数据对象的区别?

json - SQL 中的领域事件存储...使用 JSON 序列化?

domain-driven-design - 聚合可以成为域事件的一部分吗?

c# - 具有持久性无知对象的持久性和领域事件

c# - 识别 Facebook 域模型中的实体和值对象

scala - Scala 中基于角色的编程框架/面向复合的编程框架

domain-driven-design - 身份验证和用户任务