Die hexagonale Architektur ist eine Alternative zur weit verbreiteten 3-tier Architektur basierend aus Controllern, Services und Repositories. Anders als auf Schichten, wird hier das Augenmerk auf Hüllen gelegt, wobei die fachliche Domäne das Zentrum der Architektur bildet.
Dieser Vortrag zeigt zunächst die konzeptionellen Eigenschaften der hexagonalen Architektur und ihre Vor- und Nachteile. Im Anschluss wird an einem Beispiel gezeigt, wie man eine klassische 3-tier Architektur in eine hexagonale Architektur überführt und dabei fachliche Themen zentriert.
Wir alle kennen die typische Backendarchitektur bestehend aus Controllern, Services und Repositories. Gewachsen aus der klassischen 3-tier Architektur, wird sie auch heute noch sehr oft in Microservices eingesetzt.
Aus der technischen Trennung ergeben sich allerdings in wachsenden Komponenten zusehends Probleme. Oft werden fachliche Themen mit technischen Implikationen vermischt, da nicht klar ist, wo Fachlogik eigentlich verortet werden soll. Im Controller finden sich Datenvalidatoren, im Service Berechnungen und im Repository oder gar direkt in der Datenbank fachliche Vor- und Nachbedingungen. Fachliche Einzelteile werden dann über Komponenten hinweg orchestriert und erhält oft ein dichtes Netz an Abhängigkeiten zwischen den Schichten. Eine Antwort auf die Frage „Was tut meine Software eigentlich?“ wird dadurch immer weiter erschwert und auch die Wart- und Testbarkeit leidet stark darunter.
Eine Alternative bildet hier die hexagonale Architektur. Anders als die Top-Down Architekturen, baut sie auf eine Hüllenarchitektur auf, in deren Mitte die fachliche Domäne beheimatet ist. Nur hier werden fachliche Themen behandelt, Vor- und Nachbedingung geprüft und Daten auf Plausibilität geprüft. Als Nebeneffekt erhält man dabei eine zentrale Stelle der „Wahrheit, dieim Code liegt“.
Von innen nach außen wird die Domäne von der Applikationsschicht und die Portschicht eingehüllt. Während sich die Applikationsschicht um die Umwandlung technischer Objekte in fachliche und der Orchestrierung zusammenhängender Domainobjekte widmet, bildet die Portschicht die Verbindung in die Außenwelt. Dabei ist unerheblich ob Daten per HTTP in das System gelangen oder per (O/J)DBC in eine Datenbank gestreamt werden.