防腐层(Anti Corruption Layer)介绍

防腐层(ACL):DDD(Eric Evans)中引入的模式, 用于隔离两个系统, 允许两个系统之间在不知道对方领域知识的情况下进行集成。

主要进行的是两个系统之间的model(模型)或者协议的转换, 并且最终目的是为了系统使用者的方便而不是系统提供者的方便, 进一步解释就是ACL尽量把系统提供者的模型转换为系统使用者的模型(而不引入中间第三者模型)

 

使用场景: 

  1. 新旧系统切换时, 有些新系统需要和旧系统打交道, 此时可以利用 防腐层隔离新旧系统。

  2. 微服务中多个边界上下文的领域知识需要共享, 可以利用防腐层隔离两个系统

  3. 一个大的系统由多个独立的小组进行维护,可能会出现有些系统重构为新系统,又要保持和其他系统的连接, 此时用防腐层做到独立迭代和兼容

 

ACL的接口:

  1. 提供一组Service

  2. 提供Entity

 

设计模式的实现:

  1. Facade

  2. Adapter

 

示意图:

防腐层(Anti Corruption Layer)介绍

 

(上图是新旧系统之间通过ACL来做隔离)

 

 

防腐层(Anti Corruption Layer)介绍

(上图先是用绞杀者模式大范围隔离新旧系统,当新的必须要和旧的交互时,此时用ACL隔离)

 

防腐层(Anti Corruption Layer)介绍

(上图是重构单体为微服务时,利用ACL可以逐步开发新服务,并利用底层旧model, ACL就是胶水代码)

 

 

防腐层(Anti Corruption Layer)介绍

(上图是结合ACL和观察者模式, 旧系统触发旧model创建事件, ACL监听后转换为新系统model)

 

防腐层(Anti Corruption Layer)介绍

 

(上图是旧系统通过ACL提供多个微服务)

 

防腐层(Anti Corruption Layer)介绍

(这个图更清晰的表达了系统重构后的运行情况, 图中的胶水代码就是ACL)

 

防腐层(Anti Corruption Layer)介绍

( 上图显示了采用两个子系统的应用程序。 子系统 A 通过防损层调用子系统 B。 子系统 A 与防损层之间的通信始终使用子系统 A 的数据模型和体系结构。防损层向子系统 B 发出的调用符合该B子系统的数据模型或方法。 防损层包含在两个系统之间转换所必需的所有逻辑。 该层可作为应用程序内的组件或作为独立服务实现。)

 

 

所有图片来自网络,有侵权请联系我删除。 :)