事件驱动架构中的领域事件 vs 事件通知 vs 事件携带的状态传输 ECST,实现领域驱动设计 (DDD)

Ant*_*s S 5 architecture events domain-driven-design event-driven domain-events

我想澄清一下在实现 DDD(领域驱动设计)的 EDA 系统(具有事件驱动架构的系统)中实现不同类型事件的方式。假设我们没有使用事件溯源。

更具体地说,阅读相关文章后,似乎有 3 种事件:

  • 事件通知:这种事件似乎没有携带太多细节,它只是通知已经发生的事件,提供一种查询更多信息的方式。

"type": "paycheck-generated",
"event-id": "537ec7c2-d1a1-2005-8654-96aee1116b72", 
"delivery-id": "05011927-a328-4860-a106-737b2929db4e", 
"timestamp": 1615726445,
"payload": {
"employee-id": "456123",
"link": "/paychecks/456123/2021/01" }
}
Run Code Online (Sandbox Code Playgroud)
  • 事件携带的状态转移(ECST):该事件似乎有两种风格,要么具有某些已更改信息的增量,要么包含资源的所有相关信息(快照)。
{
"type": "customer-updated",
"event-id": "6b7ce6c6-8587-4e4f-924a-cec028000ce6", 
"customer-id": "01b18d56-b79a-4873-ac99-3d9f767dbe61", 
"timestamp": 1615728520,
"payload": {
"first-name": "Carolyn", 
"last-name": "Hayes",
"phone": "555-1022",
"status": "follow-up-set", 
"follow-up-date": "2021/05/08", 
"birthday": "1982/04/05", 
"version": 7
 } 
}
Run Code Online (Sandbox Code Playgroud)
{
"type": "customer-updated",
"event-id": "6b7ce6c6-8587-4e4f-924a-cec028000ce6", 
"customer-id": "01b18d56-b79a-4873-ac99-3d9f767dbe61", 
"timestamp": 1615728520,
"payload": {
"status": "follow-up-set", 
"follow-up-date": "2021/05/10", 
"version": 8
} 
}
Run Code Online (Sandbox Code Playgroud)
  • 领域事件:此事件位于其他两个事件之间,它比事件通知具有更多信息,但此信息与特定域更相关。

上面的每个示例都来自 Khononov 的书(学习领域驱动设计:调整软件架构和业务策略)

说了前面的陈述,我想澄清以下问题:

(1)与其他有界上下文通信时,事件携带状态转移 (ECST) 和事件通知类型的典型用途是否以集成事件的形式(在 DDD EDA 系统中)使用?(通过根据用例将领域事件转换为集成事件)

(2) 使用事件驱动架构的领域驱动设计系统中是否存在一种或多种其他典型事件类别?例如:发生域错误时的事件通知 - 针对特定错误的客户端通知(在这种情况下,没有发生聚合持久性) - 这些类型的错误如何传播回客户端,以及名称可能是什么DDD EDA 社区接受的此类活动有哪些?