Uge 34 – Hexagonal Architecture

Portfolio: Marlen Halvorsen

Uge 34 – Hexagonal Architecture

Dato: 22-08-2025  |  Uge: 34

Kontekst

Backend-udvikling og API-design

Mål

Undersøge arkitekturmæssige design, der følger best practice og kan udstille ekstern port samt håndtere kald til eksterne API’er.

Proces

Afsøgte materiale omkring arkitekturdrevet design fra tidligere semestre, søgte på nettet efter alternativer.

Resultat

Layered architecture blev afsøgt, da det kunne bruges, hvis man erstattede repository-laget med fx en type GoogleVisionClient.
Ønsker dog på sigt at kunne implementere flere versioner af billedgenkendelsestjenester, således at resultaterne kan sammenlignes. Bevæget mig derfor væk fra denne idé.

Orienterede mig i Hexagonal design, også kaldet Ports and Adapters. Dette er en softwarearkitektur, hvor man ser for sig en sekskantet boks. I midten af denne boks er al domænelogikken. Rundt omkring denne logik finder man “porte” (interfaces), og på ydersiden af disse porte sidder “adapters”, som forbinder kernen til omverdenen.

Man har to sider af den sekskantede boks: På den indkommende side, hvor man modtager data, findes Driving side – altså det, der initierer handlingen. På den anden side har man Driven side, dvs. den, der bliver kaldt. Driving side sender input ind i kernen, mens driven side er den del, der sættes i gang.

Driving side = input -> systemet
Dette er her en adapter starter en Use Case. Driven side = systemet -> output Dette er her en adapter udfører noget på vegne af domænet, fx API-kald til AI-analyse.

Hexagonal Architecture

Umiddelbart synes Hexagonal architecture at være et godt match, der kan gøre koden robust og skalerbar. Der virker desuden til at være gode muligheder for test, da domænelogikken er adskilt og uafhængig. Nye adapters kan implementeres uden indflydelse på forretningslogikken da de skal forholde sig til domænets kontrakter, såkaldt Dependency Inversion. Der vil desuden være en klar separation of concerns.

Ulemper med arkitekturen er, at der kan opstå meget boilerplate-kode, der skal skrives, samt interfaces og implementeringer af disse. Ved større applikationer kan der opstå latenstid, men det vurderes ikke som tilfældet ved vores projekt.

Videre plan

Uge 35: Realisering af Hexagonal Architecture

Ressourcer