Die zentrale Idee des Musters ist die Isolation des Anwendungskerns von dessen technischem Kontext. Zu diesem Zweck werden die einzelnen Elemente eines Systems als Hexagone angeordnet:
Die beiden innenliegenden Hexagone „Domain“ und „Use case“ modellieren die Kernanwendung und sind frei von technischem Jargon. Die Kernanwendung kommuniziert über Ports mit ihrer Umwelt. Es wird zwischen Primary und Secondary Ports unterschieden. Ein Primary Port modelliert eine eingehende Verbindung, über den der Kontext (z.B. das User Interface oder ein Web-Browser) Funktionen des Anwendungskerns aufruft. Ein Secondary Port modelliert eine ausgehende Verbindung, über den der Anwendungskern Dienste seines Kontexts (z.B. eine Datenbank) nutzt.
Das die Use cases umschliessende Hexagon enthält die sog. Adapter der Anwendung, die den Ausführungskontext auf die Kernanwendung „adaptieren“. Adapter übersetzen die technischen Konzepte des Kontexts (z.B. JSON, HTML oder HTTP) auf die Sprache der Anwendungsdomäne bzw. vice versa. Es wird zwischen Driving und Driven Adapter unterschieden. Driving Adapter treiben die Anwendung von aussen und nutzen dafür die von der Anwendung bereitgestellten Primary Ports. Driven Adapter implementieren die von der Anwendung bereitgestellten Secondary Ports, so dass die Anwendung über diese Ports mit der Umwelt kommuniziert, ohne zu wissen welche Adapter-Implementierung sich hinter dem jeweiligen Port verbirgt.
Der wesentliche Vorteil Hexagonaler Architekturen ist die Entkopplung der Anwendung von ihrem Ausführungskontext und die daraus resultierende einfache Testbarkeit.
Links