防腐层(ACL):DDD(Eric Evans)中引入的模式, 用于隔离两个系统, 允许两个系统之间在不知道对方领域知识的情况下进行集成。
主要进行的是两个系统之间的model(模型)或者协议的转换, 并且最终目的是为了系统使用者的方便而不是系统提供者的方便, 进一步解释就是ACL尽量把系统提供者的模型转换为系统使用者的模型(而不引入中间第三者模型)
使用场景:
-
新旧系统切换时, 有些新系统需要和旧系统打交道, 此时可以利用 防腐层隔离新旧系统。
-
微服务中多个边界上下文的领域知识需要共享, 可以利用防腐层隔离两个系统
-
一个大的系统由多个独立的小组进行维护,可能会出现有些系统重构为新系统,又要保持和其他系统的连接, 此时用防腐层做到独立迭代和兼容
ACL的接口:
-
提供一组Service
-
提供Entity
设计模式的实现:
-
Facade
-
Adapter
示意图:
(上图是新旧系统之间通过ACL来做隔离)