Hexagonal Architecture (Ports & Adapters)
Einleitung
Hexagonal Architecture isoliert die Business-Logik konsequent von Infrastruktur, UI und externen Systemen.
Die Anwendung besteht aus:
- einem Core (Domäne + Use Cases)
- Ports als stabile Verträge
- Adaptern, die Technologie anbinden
Ziel:
Der Core bleibt stabil – Infrastruktur ist austauschbares Detail.
Einordnung
Hexagonal Architecture ist ein App-internes Strukturmuster.
Sie ist:
- kein Systemstil
- kein Deployment-Muster
- kein Infrastruktur-Pattern
Sie strukturiert ausschließlich den inneren Aufbau einer Anwendung.
Zentrales Prinzip
Externe Systeme sprechen nie direkt mit dem Core.
Sie sprechen immer über Ports.
Grundstruktur
Arten von Ports
1️⃣ Inbound Ports (Driving)
Definieren:
- Use Cases
- Anwendungsfälle
- Interaktionspunkte
Beispiele:
CreateOrderUseCaseCalculatePremium
Sie werden von:
- REST-Controllern
- CLI
- Messaging-Listenern
aufgerufen.
2️⃣ Outbound Ports (Driven)
Definieren:
- benötigte Infrastruktur-Fähigkeiten
Beispiele:
OrderRepositoryPaymentGatewayEventPublisher
Sie werden vom Core aufgerufen.
Charakteristika
- Core kennt nur Ports
- Adapter implementieren Ports
- Keine Framework-Typen im Core
- Mehrere Adapter pro Port möglich (Mock, InMemory, DB, HTTP etc.)
Symmetrie-Gedanke
Hexagonal behandelt:
- UI
- Datenbank
- Messaging
- Externe Services
als gleichwertige Außensysteme.
Es gibt kein „oben“ oder „unten“ – nur innen und außen.
Das ist der eigentliche Kern des Hexagon-Gedankens.
Vorteile
- Sehr hohe Testbarkeit
- Technologieaustausch ohne Core-Refactoring
- Klare Architekturgrenzen
- Geringere Framework-Abhängigkeit
Risiken / typische Fallstricke
1️⃣ Technische Ports
Wenn Ports technische Details enthalten:
→ Architektur verletzt.
2️⃣ Übergranularität
Zu viele Ports für triviale Funktionen → unnötige Komplexität.
3️⃣ Adapter-Logik-Leakage
Wenn Business-Logik in Adapter wandert → Core wird ausgehöhlt.
Wann sinnvoll?
- Komplexe Domänen
- Langlebige Systeme
- Hohe Testanforderungen
- Wechselbare Infrastruktur
Wann weniger sinnvoll?
- Kleine CRUD-App
- Kurzlebige Tools
- Geringe Business-Logik
Abgrenzung zu Clean Architecture
| Hexagonal | Clean Architecture |
|---|---|
| Fokus auf Ports & Adapter | Fokus auf Dependency Rule |
| Symmetrische Außenwelt | Klare Schichtenstruktur |
| Core + Ports | Entities + Use Cases + Adapters |
Clean Architecture kann als Weiterentwicklung / Formalisierung der Hexagonal-Idee verstanden werden.
Strategische Perspektive
Hexagonal Architecture schützt:
- Domäne
- Testbarkeit
- Evolvierbarkeit
Sie reduziert:
- Framework-Lock-in
- Infrastruktur-Kopplung
Sie erhöht:
- Strukturdisziplin
- Abstraktionsbedarf
Fazit
Hexagonal Architecture ist besonders stark, wenn:
Business-Logik wertvoller ist als Technologie.
Sie ist kein Selbstzweck, aber ein sehr wirksames Strukturprinzip für langlebige Systeme.
Quellen
- Alistair Cockburn: Hexagonal Architecture, 2005.
- arc42 Patterns Collection.