Het Anti-Corruption Layer (ACL) is een architecturaal patroon dat wordt gebruikt om het interne domeinmodel van de applicatie te beschermen tegen de invloeden van externe systemen bij integratie.
Waarom is het nodig: Wanneer jouw systeem interactie heeft met andere systemen (bijvoorbeeld gegevens en bedrijfslogica overneemt van verouderde software of externe diensten), kan het externe contract veranderen of vervormingen bevatten. ACL maakt het mogelijk om het interne model te isoleren van wijzigingen die niet compatibel zijn met jouw bedrijfslogica.
Hoe te implementeren: Er worden extra componenten geïntroduceerd - adapters en facades - die externe gegevens/interfaces omzetten in interne objecten. Dit kunnen services, mappers of speciale DTO-klassen zijn.
Voorbeeld in 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 )
Hier is OrderAdapter verantwoordelijk voor de isolatie van het interne systeem van de wijzigingen in de structuur van de externe bestelling.
Belangrijkste kenmerken:
Kun je gewoon een laag van POJO/DTO mappers gebruiken in plaats van een volledige ACL?
Nee, simpele mappers beschermen de bedrijfslogica niet en zijn niet volledig als adapters. ACL is een samenhangende laag die een beveiligde integratie implementeert, inclusief contextuele transformatie van commando's, gebeurtenissen en bedrijfsfouten.
Hoeveel niveaus van transformatie zijn toegestaan in ACL?
Zoveel als nodig is voor volledige isolatie. Gewoonlijk zijn dit er minimaal twee: de transformatie van structuur en de mapping van bedrijfslogica (bijvoorbeeld status, foutcodes en toegangsbeleid).
Hoe moet je externe systeemfouten correct verwerken in ACL?
ACL moet externe fouten onderscheppen en aanpassen naar interne exception-klassen of statuscodes. Gooi nooit rechtstreeks fouten van externe systemen door naar jouw applicatie.