反腐层(ACL)用于防止不希望的逻辑、模型或数据在集成系统之间“渗透”。该模式实现了一个翻译器、适配器和外观的中介层,以将一个领域模型与另一个领域隔离。
例如,在将旧帐户系统与新电子商务平台集成时,ACL 允许转换数据格式、验证它们并正确处理双方的业务规则。
class LegacyUserDTO: def __init__(self, legacy_id, fname, lname): self.legacy_id = legacy_id self.fname = fname self.lname = lname class ModernUser: def __init__(self, id, first_name, last_name): self.id = id self.first_name = first_name self.last_name = last_name def acl_translate(legacy_user): return ModernUser( id=legacy_user.legacy_id, first_name=legacy_user.fname, last_name=legacy_user.lname )
可以使用序列化或 ORM 代替反腐层吗?
序列化和 ORM 简化了数据的传输和存储,但并不能保护领域模型免受外部影响。只有 ACL 才能提供逻辑的隔离和双方系统业务规则的一致性。
在什么情况下不需要 ACL?
如果两个系统具有相同或一致的模型,并且由同一团队控制,则通常不需要 ACL。但实际上,即使是微小的差异在没有 ACL 的情况下也可能导致问题。
如果直接进行集成而没有 ACL,会发生什么?
存在很高的风险,第三方系统的更改会对主要系统的业务逻辑产生负面影响,或者导致错误。