Die Hexagonale Architektur: Ein flexibles Software-Design-Prinzip

  • Die Softwareentwicklung steht oft vor der Herausforderung, Anwendungen so zu entwerfen, dass sie flexibel, gut testbar und unabhängig von spezifischen Technologien bleiben. Eine Architektur, die genau diese Ziele verfolgt, ist die Hexagonale Architektur, auch als Ports-and-Adapters-Architektur bekannt. Sie wurde von Alistair Cockburn entwickelt und zielt darauf ab, eine klare Trennung zwischen der Geschäftslogik und äußeren Abhängigkeiten herzustellen. Dadurch lassen sich Anwendungen leichter warten, erweitern und testen.

Grundprinzipien

Die hexagonale Architektur basiert auf der Idee, dass eine Anwendung in ihrem Kern eine unabhängige Geschäftslogik besitzt, die über definierte Ports (Schnittstellen) mit der Außenwelt kommuniziert. Die externen Systeme wie Datenbanken, Benutzeroberflächen oder externe APIs werden über Adapter angebunden. Dieses Konzept kann mit einem Hexagon (Sechseck) als grafische Darstellung visualisiert werden, wobei jeder Seite des Hexagons ein bestimmter Adapter zugeordnet ist.

Die wichtigsten Prinzipien sind:

Trennung von Geschäftslogik und Infrastruktur: Die Kernlogik ist unabhängig von spezifischen Technologien und externen Systemen.
Flexibilität durch Adapter: Die Anbindung externer Komponenten erfolgt über Adapter, die leicht ausgetauscht werden können.
Testbarkeit: Da die Geschäftslogik isoliert bleibt, kann sie unabhängig von Datenbanken oder anderen Systemen getestet werden.
Erweiterbarkeit: Neue Technologien oder Schnittstellen können hinzugefügt werden, ohne die Kernlogik zu verändern.

Aufbau der Hexagonalen Architektur

Die Architektur besteht aus drei Hauptkomponenten:

  1. Kernlogik (Domain): Dieser Bereich enthält die Geschäftslogik der Anwendung. Er ist vollständig unabhängig von äußeren Technologien und bildet das Herzstück des Systems.
  2. Ports (Schnittstellen): Diese definieren, wie die Kernlogik mit der Außenwelt interagiert. Man unterscheidet zwischen eingehenden Ports (für Benutzerinteraktionen oder externe Systeme) und ausgehenden Ports (für Datenbankzugriffe oder externe APIs).
  3. Adapter (Implementierungen der Ports): Diese stellen die Verbindungen zwischen den Ports und den tatsächlichen Technologien her. Sie ermöglichen den Zugriff auf Datenbanken, externe APIs oder Benutzeroberflächen.

Beispiel einer Hexagonalen Architektur

Angenommen, wir entwickeln ein Bestellsystem für einen Online-Shop. Die hexagonale Architektur würde folgendermaßen aufgebaut sein:

  1. Kernlogik: Enthält die Geschäftsregeln, z. B. die Berechnung des Gesamtpreises einer Bestellung oder die Prüfung der Produktverfügbarkeit.
  2. Eingehende Ports: Eine API-Schnittstelle, über die Bestellungen entgegengenommen werden.
  3. Eingehende Adapter: Ein REST-Controller, der HTTP-Anfragen verarbeitet und an die Kernlogik weiterleitet.
  4. Ausgehende Ports: Eine Schnittstelle für den Zugriff auf eine Datenbank zur Speicherung von Bestellungen.
  5. Ausgehende Adapter: Eine Implementierung des Datenbankzugriffs, die beispielsweise auf MySQL oder MongoDB basiert.

Vorteile der Hexagonalen Architektur

Die hexagonale Architektur bietet viele Vorteile gegenüber klassischen monolithischen oder stark gekoppelten Architekturen:

  • Unabhängigkeit von Technologien: Die Kernlogik bleibt unverändert, selbst wenn sich Datenbanken oder APIs ändern.
  • Einfache Testbarkeit: Durch die Trennung der Logik kann diese isoliert getestet werden, ohne dass eine echte Datenbank oder API benötigt wird.
  • Flexibilität und Erweiterbarkeit: Neue Schnittstellen können leicht hinzugefügt oder bestehende ausgetauscht werden.
  • Bessere Wartbarkeit: Durch die klare Struktur bleibt der Code übersichtlich und modular.

Herausforderungen und Nachteile

Trotz ihrer vielen Vorteile hat die hexagonale Architektur auch einige Herausforderungen:

  • Komplexität: Die Einführung von Ports und Adaptern kann den initialen Entwicklungsaufwand erhöhen.
  • Mehr Code und Abstraktion: Durch die Verwendung von Schnittstellen und Adapterklassen entsteht zusätzlicher Code.
  • Nicht für jede Anwendung notwendig: In kleinen Projekten oder einfachen CRUD-Anwendungen kann die hexagonale Architektur überdimensioniert sein.

Vergleich mit anderen Architekturen

Die hexagonale Architektur steht im Vergleich zu anderen Architekturmuster wie Layered Architecture oder Clean Architecture:

  • Layered Architecture: In einer klassischen Schichtenarchitektur (z. B. mit einer UI-, Service- und Datenbank-Schicht) besteht oft eine enge Kopplung zwischen den Schichten. Die hexagonale Architektur löst diese Kopplung durch definierte Schnittstellen.
  • Clean Architecture: Ähnlich zur hexagonalen Architektur, jedoch mit einer noch stärkeren Fokussierung auf die Entkopplung von Geschäftslogik und technischen Details.

Anwendungsfälle

Die hexagonale Architektur eignet sich besonders für:

  • Microservices: Da sie eine lose Kopplung zwischen Komponenten fördert, passt sie gut zu Microservices-Architekturen.
  • Domain-Driven Design (DDD): Sie unterstützt die Trennung von Domänenlogik und technischen Details.
  • Cloud-native Anwendungen: Flexibilität bei der Anpassung an verschiedene Cloud-Dienste oder Container-Technologien wie Docker und Kubernetes.

Fazit

Die hexagonale Architektur bietet eine robuste und flexible Möglichkeit, Software zu gestalten, die langfristig wartbar und erweiterbar bleibt. Sie eignet sich besonders für komplexe Anwendungen, bei denen Testbarkeit, Unabhängigkeit von Technologien und Flexibilität wichtig sind. Auch wenn die Einführung mit einem gewissen Mehraufwand verbunden ist, zahlt sich dieser in großen Projekten durch eine bessere Wartbarkeit und Anpassungsfähigkeit aus. Wer nachhaltige Software entwickeln möchte, sollte die hexagonale Architektur in Betracht ziehen.

Quellen

  • Cockburn, Alistair: Hexagonal Architecture
    https://alistair.cockburn.us/hexagonal-architecture/

  • Evans, Eric: Domain-Driven Design: Tackling Complexity in the Heart of Software, Addison-Wesley, 2003.

  • Fowler, Martin: Patterns of Enterprise Application Architecture, Addison-Wesley, 2002.

 

ThoughtWorks Blog: Hexagonal Architecture and its benefits
https://www.thoughtworks.com/insights/blog/hexagonal-architecture