防腐层与开放主机服务
目的:降低限界上下文之间的耦合关系
防腐层:(下游限界上下文对 上游限界上下文变化的隔离)
是什么:设计思想“间接”的一种体现
方法:通过引入一个间接的层,就可以
目的:有效隔离限界上下文之间的耦合
设计模式:间接的防腐层还可以扮演“适配器”的角色、“调停者”的角色、“外观”的角色
防腐层往往属于下游限界上下文,用以
目的:隔绝上游限界上下文可能发生的变化。
下游团队终究可能面临不可掌控的上游变化。
在防腐层中定义一个映射上游限界上下文的服务接口,就可以将掌控权控制在下游团队中,
即使上游发生了变化,影响的也仅仅是防腐层中的单一变化点,只要防腐层的接口不变,下游限界上下文的其他实现就不会受到影响。
图例:
无防腐层:
下游上下文可能存在多处对上游上下文领域模型的依赖,一旦上游发生变更,就会影响到下游的多处实现
有防腐层:
多处依赖转为对防腐层的依赖
由防腐层指向上游上下文,形成单一依赖
好处:上游变更时,影响的仅仅是防腐层,下游上下文自身并未受到影响。
防腐层对遗留系统治理:
将遗留系统视为一个整体的限界上下文,然后为调用它的下游上下文建立防腐层
在防腐层内:
从调用者角度思考需要公开的服务接口,并引入领域驱动设计为其提炼出清晰的领域模型,然后再从遗留系统中去寻找对应的实现,慢慢将合适的代码搬移过来,适时对其重构。
开放主机服务:(上游限界上下文的承诺)
防腐层是下游限界上下文对抗上游变化的利器
开放主机服务就是上游服务用来吸引更多下游调用者的诱饵
实现:定义公开服务的协议,包括通信的方式、传递消息的格式(协议)。同时,也可视为是一种承诺,保证开放的服务不会轻易做出变化。
目的:降低上游与下游限界上下文之间的依赖
发布/订阅事件:
事件(消息 解耦):
适用范围:异步非实时的业务场景
优点:
1 解耦
2 非阻塞特性也使得整个架构具有更强的响应能力