IDDD 8 DomainEvent

<< 实现领域驱动设计 >> 八: 领域事件

用于捕获发生在领域内,领域专家所关心的一些事情


img

MindMapping Source (Org Format):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

* 领域事件
用于捕获发生在领域内,领域专家所关心的一些事情
** 何时/为什么使用?
*** 当。。。的时候。。
*** 通用语言的正式成员
** 建模
*** 创建具有聚合特征的
**** 发生在过去的事情
**** 应设计成不变的,但拥有唯一标识
*** 身份标识
**** 方便比较
**** 需要发布在外部限界上下文时,唯一标识是必要的
** 发布
*** 从领域模型中发布
**** 观察者模式
***** 发送方
由聚合创建,并发布出去
***** 订阅方
由应用/领域服务,向领域事件注册订阅
与聚合位于相同线程内
*** 向远程限界上下文发布
**** 消息设施的一致性
最终一致性
***** 领域模型和消息设施,共享持久化存储
***** 领域模型的持久化存储和消息持久化存储,由全局XA事务(两段提交)所控制
***** 领域模型的持久化存储中,创建特殊的存储区域,即事件存储
**** 自治服务和系统
***** 通过领域事件,将任何系统设计成自治服务和系统
***** 避免远程过程调用(RPC)
**** 容许时延
长时间的事件延迟有可能发生
** 事件存储
*** 作为消息队列使用,将所有领域事件发布出去
*** 基于REST的事件通知
*** 跟踪bug
*** 业务分析和预测
*** 重建聚合
*** 撤销操作
** (向外部)转发存储事件的架构风格
*** 发布事件通知
**** 以REST资源的方式
***** “拉”的方式,非“推”的方式
***** 不能很好支持有顺序的接收
**** 通过消息中间件
** 实现
*** 发布NotifiactionLog
*** 发布基于消息的事件通知
**** 事件消重
***** 幂等操作
进行多次重复操作和只进行一次操作所产生的结果相同.