Anti-Corruption Layer (ACL)
Einleitung
Eine Anti-Corruption Layer (ACL) schützt das eigene Domänenmodell vor Fremdmodellen, Legacy-Strukturen oder Vendor-Semantik.
Sie übersetzt:
- Daten
- Befehle
- Queries
- Events
kontrolliert und explizit, damit technische Integration nicht zur fachlichen Kontamination führt.
Eine ACL ist kein Komfort-Pattern.
Sie ist ein Schutzmechanismus.
Einordnung
ACL ist ein strategisches Context-Mapping-Pattern in DDD.
Ziel:
- semantische Entkopplung
- Schutz der Ubiquitous Language
- langfristige Evolvierbarkeit
Sie gehört zur Domänen- und Integrations-Ebene, nicht zur Infrastruktur.
Grundprinzip
Kernaussage:
- Fremdmodell bleibt außerhalb
- Übersetzung erfolgt kontrolliert
- Eigenes Modell bleibt sauber
Charakteristika
1️⃣ Explizite Übersetzungsschicht
Die ACL:
- mappt externe Modelle auf interne
- konvertiert Events
- transformiert Statuswerte
- isoliert fremde Fehlercodes
2️⃣ Schutz der Ubiquitous Language
Begriffe aus dem Fremdsystem:
- werden nicht übernommen
- werden nicht „durchgereicht“
- werden nicht in Core-Domäne verankert
Die ACL ist sprachlicher Filter.
3️⃣ Ownership beim integrierenden Team
Wichtig:
Die ACL gehört dem Downstream.
Nicht dem Upstream. Nicht der Plattform. Nicht „allen“.
4️⃣ Implementierungsformen
Typisch als:
- Adapter / Translator
- Facade
- API-Gateway-Adapter
- Event-Mapper
- DTO-Assembler
- Message-Handler
Bei asynchroner Integration häufig kombiniert mit:
- Outbox
- CDC
- Idempotenz
Vorteile
- Schutz vor Legacy-Kontamination
- Austauschbarkeit externer Systeme
- Kontrollierte Migration
- Langfristige Modellstabilität
Risiken / typische Fallstricke
1️⃣ Komplexe Mapping-Logik
Wenn Modelle stark divergieren, wird Mapping fehleranfällig.
2️⃣ Zweites Legacy-System
Eine schlecht gepflegte ACL wird selbst zur Wartungshölle.
3️⃣ Performance-Overhead
Zusätzliche Transformation erhöht Latenz und Komplexität.
4️⃣ Verwechslung mit DTO-Mapping
Eine ACL ist mehr als:
„wir mappen JSON-Felder um“.
Sie schützt Semantik, nicht nur Struktur.
Wann sinnvoll?
- Externes Modell passt fachlich nicht
- Vendor- oder Legacy-Druck existiert
- Langfristige Entkopplung gewünscht ist
- Migration schrittweise erfolgen soll
Wann unnötig?
- Modelle sind nahezu deckungsgleich
- Integration ist kurzfristig und temporär
- vollständige Autonomie nicht erforderlich
Vergleich zu anderen Context-Mapping-Patterns
| Pattern | Modellübernahme | Übersetzung | Autonomie |
|---|---|---|---|
| Conformist | Ja | Nein | Niedrig |
| Shared Kernel | Teilweise | Nein | Mittel |
| Customer–Supplier | Nein | Nein | Mittel |
| Anti-Corruption Layer | Nein | Ja | Hoch |
Strategische Perspektive
ACL ist:
- teurer als Conformist
- sauberer als Shared Kernel
- nachhaltiger als implizite Kopplung
Sie ist ein Invest in:
- Modellqualität
- Evolvierbarkeit
- Unabhängigkeit
Fazit
Eine Anti-Corruption Layer schützt die Identität eines Bounded Contexts.
Sie lohnt sich, wenn:
- langfristige Autonomie wichtig ist
- externe Modelle instabil oder fremd sind
- Migration geplant ist
Sie ist kein „Nice-to-have“. Sie ist eine bewusste Architekturentscheidung.