Infrastruktur-Abstraktionen (Ports)
Einleitung
Ports entkoppeln Geschäftslogik von Infrastruktur.
Der Anwendungskern definiert stabile Verträge (Ports), gegen die er arbeitet.
Konkrete Technologien (DB, Broker, HTTP-Clients) werden über Adapter angebunden.
Ziel:
Die Domäne bleibt stabil – Infrastruktur darf wechseln.
Einordnung
Ports sind ein Strukturprinzip in Hexagonal-, Clean- und Onion-Architekturen.
Sie gehören zur Applikations- und Domänenschicht, nicht zur Infrastruktur.
Ports definieren:
- was die Anwendung braucht
- nicht wie es technisch umgesetzt wird
Grundprinzip
Kernidee:
- Core kennt nur den Port
- Adapter implementiert den Port
- Infrastruktur bleibt austauschbar
Arten von Ports
1️⃣ Inbound Ports (Driving)
- definieren Use Cases
- werden von Controllern, Messaging-Listenern etc. aufgerufen
Beispiel:
CreateOrderUseCase
2️⃣ Outbound Ports (Driven)
- definieren benötigte Infrastruktur-Fähigkeiten
- werden vom Core aufgerufen
Beispiel:
OrderRepository
PaymentGateway
EventPublisher
Charakteristika
- Ports sind fachlich benannt, nicht technisch
- Keine Framework-Typen im Port
- Adapter enthalten Technologie-Code
- Tests mocken Ports, nicht Infrastruktur
Vorteile
- Sehr hohe Testbarkeit
- Schnelle Feedback-Zyklen
- Technologiewechsel ohne Core-Refactoring
- Klare Trennung von Verantwortung
Risiken / typische Fallstricke
1️⃣ Technische Ports
Wenn Ports so aussehen:
JpaRepository
KafkaTemplate
HttpClientWrapper
→ Architektur ist bereits kompromittiert.
2️⃣ Overabstraction
Wenn keine Austauschbarkeit realistisch ist:
→ unnötige Interfaces erhöhen Komplexität.
3️⃣ Inkonsistente Schnitte
Unterschiedliche Module definieren Ports nach verschiedenen Prinzipien.
→ Erosion der Architektur.
Wann sinnvoll?
- Langfristig wartbare Business-Logik
- Wechselbare Infrastruktur
- Hohe Testanforderungen
- Komplexe Domänen
Wann weniger sinnvoll?
- Kleine CRUD-App
- Kurzlebiges Projekt
- Monolith ohne Integrationsdruck
Strategische Perspektive
Ports sind kein Selbstzweck.
Sie sind ein Schutzmechanismus für:
- Domänenlogik
- Architektur-Stabilität
- langfristige Evolvierbarkeit
Richtig eingesetzt:
Infrastruktur ist Detail. Domäne ist Zentrum.
Typische Kombinationen
- Hexagonal Architecture als Strukturrahmen
- Outbox/Repository als Outbound Ports
- REST-Controller als Inbound Adapter
- Contract-Tests zwischen Core und Adapter
Fazit
Ports ermöglichen:
- klare Architekturgrenzen
- testbare Business-Logik
- kontrollierte Technologie-Evolution
Sie sind der Kernmechanismus, der Clean/Hexagonal Architektur tatsächlich wirksam macht.