反腐层(ACL)是一种架构模式,用于在集成时保护应用程序的内部领域模型不受外部系统的影响。
用途: 当您的系统与其他系统(例如,从过时的软件或第三方服务中继承数据和业务逻辑)进行交互时,外部合同可能会发生变化或包含扭曲。ACL可以将内部模型与不兼容于您的业务逻辑的更改隔离开。
如何实现: 引入额外的组件——适配器和外观来将外部数据/接口转换为内部对象。这可以是服务、映射器、特殊的DTO类。
Python示例:
class ExternalOrder: def __init__(self, order_id, amount, created_at): self.order_id = order_id self.amount = amount self.created_at = created_at class InternalOrder: def __init__(self, id, total, timestamp): self.id = id self.total = total self.timestamp = timestamp class OrderAdapter: @staticmethod def from_external(external_order): return InternalOrder( id=external_order.order_id, total=external_order.amount, timestamp=external_order.created_at )
在这里,OrderAdapter将内部系统与外部订单的结构变化隔离开。
关键特点:
可以只使用POJO/DTO映射器层来替代完整的ACL吗?
不可以,简单的映射器无法保护业务逻辑,也不算真正的适配器。ACL是一个完整的层,能够实现受保护的集成,包括命令、事件和业务错误的上下文转换。
在ACL中可以使用多少个转换层?
可根据完全隔离的需求决定。通常至少需要两个:结构转换和业务逻辑映射(例如,状态、错误代码和访问策略)。
如何在ACL中正确处理外部系统的错误?
ACL应捕获并将外部错误适配为内部异常类或状态代码。永远不要将外部系统的错误直接抛回您的应用程序中。