Skip to content
IRC-Coding IRC-Coding
Hexagonale Architektur Ports and Adapters Dependency Inversion Clean Architecture Softwarearchitektur

Hexagonale Architektur (Ports and Adapters) einfach erklärt – Definition, Vorteile, Prüfungsfragen

Hexagonale Architektur (Ports and Adapters) verständlich erklärt: Domänenkern, Ports, Adapter, Dependency Inversion, Praxisbeispiel und typische Prüfungsfragen.

S

schutzgeist

2 min read
Hexagonale Architektur (Ports and Adapters) einfach erklärt – Definition, Vorteile, Prüfungsfragen

Hexagonale Architektur

Dieser Beitrag ist eine Begriffserklärung zur Hexagonalen Architektur (Ports and Adapters), inklusive typischer Prüfungsfragen, kurzer Merkpunkte und Tags zur Wiederholung.

Was ist die Hexagonale Architektur?

Die Hexagonale Architektur (auch Ports and Adapters) ist ein Architekturansatz, der den fachlichen Kern (Domäne / Use Cases) strikt von äußeren Abhängigkeiten trennt – etwa:

  • UI (Web, Mobile, CLI)
  • Datenbank
  • Message Broker
  • externe APIs

Die Grundidee: Der Kern definiert, was er braucht (Ports/Schnittstellen). Die Infrastruktur liefert austauschbare Implementierungen (Adapter).

Die Bausteine: Domäne, Ports, Adapter

Domänenkern

Im Zentrum liegt die Fachlogik:

  • Entities / Value Objects
  • Use Cases / Application Services
  • Geschäftsregeln

Ports

Ports sind Schnittstellen, die die Richtung der Abhängigkeit festlegen:

  • Inbound Ports: Was die Anwendung anbietet (Use Cases, Commands)
  • Outbound Ports: Was die Anwendung benötigt (Repositories, Payment, Mail, Logging)

Adapter

Adapter verbinden Ports mit konkreter Technik:

  • Inbound Adapter: REST Controller, GraphQL Resolver, CLI, Scheduler
  • Outbound Adapter: DB-Repository, HTTP-Client, Cache, Message Producer

Warum ist das hilfreich? (Vorteile)

  • Testbarkeit: Kernlogik lässt sich ohne DB/HTTP testen (Mocks/Fakes auf Ports)
  • Austauschbarkeit: Technologie-Wechsel betrifft Adapter, nicht den Kern
  • Geringere Kopplung: weniger Framework-Abhängigkeiten im Domain-Code
  • Saubere Verantwortlichkeiten: klare Systemgrenzen

Typische Nachteile / Trade-offs

  • Mehr Abstraktion (Ports/Adapter) = mehr Artefakte
  • Höherer Initialaufwand (Wiring, DI, Mapping)
  • Lernkurve für Teams, die „direkt gegen Frameworks“ entwickeln

Mini-Praxisbeispiel (vereinfacht)

Idee

Ein Use Case „Bestellung bezahlen“ kennt nur Ports. Ein Stripe-Adapter oder ein DB-Adapter kann später ausgetauscht werden.

// Inbound Port
export interface PayOrderUseCase {
  pay(orderId: string): Promise<string>;
}

// Outbound Ports
export interface OrderRepositoryPort {
  findById(orderId: string): Promise<any>;
  save(order: any): Promise<void>;
}

export interface PaymentProviderPort {
  charge(amountInCents: number, customerId: string): Promise<{ transactionId: string }>;
}

Zusammenhang mit Design Patterns

Die hexagonale Architektur nutzt mehrere bekannte Design Patterns:

Adapter Pattern

Das klassische Adapter Pattern wird hier systematisch eingesetzt. Statt einzelner Adapter implementierst du ganze Adapter-Schichten für technische Konzerne (Datenbank, HTTP, Messaging).

Strategy Pattern

Outbound Ports definieren Strategien für Infrastrukturzugriffe. Der Kern arbeitet gegen die Strategie-Schnittstelle, konkrete Implementierungen können ausgetauscht werden.

Dependency Injection

Die hexagonale Architektur basiert auf Dependency Injection. Adapter werden in den Kern injiziert, nicht umgekehrt. Das ermöglicht lose Kopplung und einfache Testbarkeit.

Facade Pattern

Inbound Adapter können als Fassaden für komplexe Use Cases dienen. Sie kapseln die Interaktion mit dem Domänenkern.

Kopplungen in der hexagonalen Architektur

Feste Kopplung (zu vermeiden)

Bei fester Kopplung hängt die Fachlogik direkt von konkreten Technologien ab. Ein Datenbank-Wechsel oder Framework-Update erfordert Änderungen im Kern der Anwendung.

Lose Kopplung (das Ziel)

Die hexagonale Architektur erzwingt lose Kopplung durch Ports. Der Kern kennt nur Schnittstellen, keine Implementierungen. Das ermöglicht:

  • Austausch von Adaptern ohne Kern-Änderungen
  • Parallelentwicklung von Domäne und Infrastruktur
  • Einfache Tests mit Mock-Implementierungen

Kopplungsrichtungen

Die Abhängigkeitsrichtung zeigt immer von außen nach innen. Adapter kennen den Kern über Ports, der Kern kennt keine Adapter.

Typische Prüfungsfragen (mit Kurzantwort)

  1. Was ist das Ziel der hexagonalen Architektur? Entkopplung der Fachlogik von technischen Details über Ports und Adapter.

  2. Inbound vs. Outbound Adapter – Unterschied? Inbound bringt Anfragen in den Kern, Outbound implementiert Infrastrukturzugriffe.

  3. Wie wird Dependency Inversion hier umgesetzt? Der Kern definiert Ports (Interfaces), die Infrastruktur implementiert sie.

  4. Warum ist das IHK-relevant? Du kannst Architekturentscheidungen mit Testbarkeit, Wartbarkeit und Austauschbarkeit begründen.

  5. Welche Rolle spielen Ports bei der Testbarkeit? Ports ermöglichen Mock-Implementierungen für Unit-Tests ohne echte Infrastruktur.

  6. Wie unterscheidet sich hexagonale von Clean Architecture? Hexagonale Architektur ist ein spezifischer Ansatz von Clean Architecture mit Fokus auf Ports und Adapter.

  7. Was passiert bei einem Datenbank-Wechsel in hexagonaler Architektur? Nur der DB-Adapter muss neu implementiert werden, der Domänenkern bleibt unverändert.

  8. Welche Verantwortung hat ein Inbound Adapter? Er empfängt externe Anfragen und leitet sie an den Domänenkern weiter.

  9. Welche Verantwortung hat ein Outbound Adapter? Er implementiert technische Schnittstellen für den Domänenkern (Datenbank, HTTP, etc.).

  10. Wie wird Dependency Inversion Principle umgesetzt? Der Domänenkern definiert Interfaces, Adapter implementieren diese Interfaces.

  11. Was bedeutet “Technology Independence”? Die Fachlogik ist unabhängig von konkreten Frameworks und Datenbanken.

  12. Welche Nachteile hat hexagonale Architektur? Höherer Initialaufwand, mehr Abstraktionsschichten, steilere Lernkurve.

  13. Wie viele Ports kann eine Anwendung haben? Beliebige Anzahl, typischerweise ein Port pro Use Case oder pro externer Schnittstelle.

  14. Was ist der Unterschied zwischen Port und Adapter? Port ist die Schnittstelle (Interface), Adapter die konkrete Implementierung.

  15. Wie wird der Domänenkern getestet? Durch Mock-Adapter auf Ports, ohne echte Infrastrukturkomponenten.

  16. Welche Frameworks unterstützen hexagonale Architektur? Spring Boot, .NET Core, Node.js mit Dependency Injection Containern.

  17. Was ist ein “Hexagon” in diesem Kontext? Symbolische Darstellung des Domänenkerns mit Ports an den Seiten.

  18. Wie werden Use Cases in hexagonaler Architektur modelliert? Als Inbound Ports mit zugehörigen Implementierungen im Domänenkern.

  19. Welche Art von Kopplung wird vermieden? Feste Kopplung zwischen Fachlogik und technischen Implementierungen.

  20. Wie wird das Adapter Pattern hier eingesetzt? Systematisch für alle externen Abhängigkeiten der Anwendung.

  21. Was sind typische Inbound Adapter? REST Controller, GraphQL Resolver, CLI Befehle, Message Listener.

  22. Was sind typische Outbound Adapter? Datenbank-Repositories, HTTP-Clients, Cache-Implementierungen, Message Producer.

  23. Wie wird Parallelentwicklung ermöglicht? Domänenkern und Adapter können unabhängig voneinander entwickelt werden.

  24. Welche Rolle spielt Dependency Injection? Sie verbindet Adapter mit Ports zur Laufzeit und ermöglicht lose Kopplung.

  25. Wann lohnt sich hexagonale Architektur? Bei langfristigen Projekten mit häufigen Änderungen und hohen Testanforderungen.

  26. Wie werden Geschäftsregeln geschützt? Durch Abstraktionsschichten, die direkten Zugriff von außen verhindern.

  27. Was bedeutet “Infrastructure doesn’t matter”? Die Fachlogik funktioniert unabhängig von der gewählten Infrastruktur.

  28. Wie wird ein neues UI-Framework integriert? Durch einen neuen Inbound Adapter, der bestehende Ports nutzt.

  29. Welche Teststrategien werden unterstützt? Unit-Tests mit Mocks, Integration-Tests mit echten Adaptern, End-to-End-Tests.

  30. Wie wird die Wartbarkeit verbessert? Durch klare Trennung von Fachlogik und technischen Details.

Wichtige Daten zum Verständnis

Historische Entwicklung

  • 2005: Alistair Cockburn prägt den Begriff “Hexagonal Architecture”
  • Alternative Namen: Ports and Adapters Pattern
  • Ziel: Schutz der Fachlogik vor technologischen Änderungen

Kernprinzipien

  • Dependency Inversion: Abhängigkeiten zeigen von außen nach innen
  • Single Responsibility: Jeder Adapter hat eine technische Aufgabe
  • Open/Closed: Ports sind offen für Erweiterung, geschlossen für Änderung

Typische Projektgrößen

  • Klein bis mittel: 5-20 Ports, 10-50 Adapter
  • Große Systeme: 50+ Ports, 100+ Adapter
  • Mikroservices: 3-10 Ports pro Service

Implementierungsdauer

  • Initialaufwand: 20-30% mehr Zeit als traditionelle Architektur
  • Amortisation: Nach 6-12 Monaten durch schnellere Änderungen
  • Testgeschwindigkeit: Unit-Tests 10-100x schneller als Integrationstests

Technologische Unterstützung

  • Java: Spring Boot mit @Component und @Autowired
  • .NET: Dependency Injection Container
  • TypeScript/Node.js: Inversify, TypeDI oder manuelle DI
  • Python: FastAPI mit Dependency Injection

Erfolgskriterien

  • Testabdeckung: >90% im Domänenkern erreichbar
  • Änderungsgeschwindigkeit: 50-80% schnellere Implementierung neuer Features
  • Wartungskosten: 30-50% geringer als bei monolithischen Architekturen

Häufige Fehler

  • Zu viele Ports: Überabstraktion führt zu Komplexität
  • Falsche Abgrenzung: Fachlogik in Adaptern verschoben
  • Ignorieren von Tests: Verzicht auf Mock-Adapter reduziert Vorteile

Die hexagonale Architektur eignet sich besonders, wenn du langfristige Wartbarkeit, gute Tests und Technologie-Unabhängigkeit priorisierst.

Vertiefende Artikel zum Thema

Die hexagonale Architektur baut auf fundamentalen Konzepten der Softwareentwicklung auf. Um das volle Potenzial dieses Architekturmusters zu verstehen, sind Kenntnisse in verwandten Bereichen essenziell. Design Patterns bilden die Grundlage für viele Architekturansätze, während solides Software Design die Entscheidungsfindung bei der Auswahl geeigneter Architekturen unterstützt. Die folgenden Artikel helfen dir, die notwendigen Grundlagen zu erlernen und die hexagonale Architektur im Kontext moderner Softwareentwicklung zu verorten.

Architektur und Design Patterns

Softwarearchitektur und Design

Praktische Anwendung

Zurück zum Blog
Share:

Ähnliche Beiträge