防腐层模式(Anti-corruption Layer)
在现代应用程序和依赖于其的遗留系统之间实现装饰层或适配器层。该层转换现代应用程序和遗留系统之间的请求。 使用此模式可确保应用程序的设计不受依赖的旧系统的限制。
背景和问题
大多数应用程序依赖于其他系统的某些数据或功能。例如,遗留应用程序迁移到现代系统时,可能仍然需要现存的遗留资源。新功能必须能够调用遗留系统。对于渐进迁移尤其如此,随着时间的推移,更大的应用程序的不同功能被迁移到现代系统。
通常这些遗留系统会受困于令人费解的数据模式或过时的API等质量问题。遗留系统中使用的功能和技术与现代系统的差异很大。为了与遗留系统进行互操作,新应用程序可能需要支持过时的基础设施,协议,数据模型,API或其它不会在现代应用程序中使用的功能。
维护新系统和遗留系统之间的连接可能迫使新系统至少遵循一些遗留系统的API或其它语义。当这些遗留功能存在质量问题时,一个设计干净的现代应用程序可能会支持它们“腐败”。
解决方案
通过在遗留系统和现代系统之间使用防腐层来隔离它们。该层转换两个系统之间的通信,允许遗留系统保持不变,同时可以避免损害现代应用程序的设计和技术方法。
现代应用与防腐层之间的通信始终使用应用程序的数据模型和架构。从防腐层到遗留系统的调用都符合该系统的数据模型或方法。 防腐层包含两个系统之间转换所需的所有逻辑。该层可以作为应用程序中的组件或作为独立服务来实现。
问题和注意事项
- 防腐层可能会增加在两个系统之间进行调用的延迟。
- 防腐层添加了必须进行管理和维护的附加服务。
- 考虑防腐层如何伸缩。
- 考虑是否需要多个防腐层。你可能希望使用不同的技术或语言将功能分解成多个服务,或者因为其它原因来分割防腐层。
- 考虑如何根据其它应用程序或服务来管理防腐层。如何将其集成到监控,发布和配置过程中?
- 确保事务和数据的一致性得到维护并可以监控。
- 考虑防腐层是否需要处理遗留和现代系统之间的所有通信,或只是功能的一个子集。
- 考虑防腐层是否是为永久性的,或者是在所有旧功能都迁移后最终退休。
何时使用该模式
在以下场景使用该模式:
- 计划在多个阶段进行迁移,但需要维护新系统和旧系统之间的集成。
- 新旧系统具有不同的语义,但仍需要通信。
如果新系统和遗留系统之间没有明显的语义差异,则该模式可能不合适。