Uge 36 – Implementering af Hexagonal Architecture

Portfolio: Marlen Halvorsen

Uge 36 – Implementering af Hexagonal Architecture

Dato: 01-09-2025  |  Uge: 36

Kontekst

Backend-udvikling og API-design

Mål

Implementere en mappestruktur for projektet baseret på Hexagonal Architecture.

Proces

Fordybe mig i Hexagonal Architecture ved brug af Google og YouTube, derefter sammensætte en mappestruktur der kan være med til at vise, hvordan Hexagonal Architecture kan komme til udtryk i en microservice.

Resultat

Som nævnt tidligere i Uge 34-indlægget, bygger arkitekturen på driving side, application og driven side.

Hexagonal Architecture

Hvis jeg tager udgangspunkt i denne use case:
Brugeren sender et billede via applikationen. Systemet analyserer billedet og identificerer et genkendeligt logo – eksempelvis “Caterpillar”. Sammen med identifikationen returneres relevant metadata. Brugeren kan herefter vælge at godkende resultatet og fortsætte processen, eller afvise det og kassere dataene.

På baggrund af dette ved jeg, at microservicen skal kunne modtage et billede, som er behandlet af en anden microservice, sende dette billede/billeder videre til en AI-tjeneste for derefter at returnere resultatet efter passende analyse.

Web (driving side) er indgangen til servicen. Her ligger Controllers, Middleware og Program.cs. Web oversætter verden (HTTP-kald og events) til et kald på den indgående port i applikationen (IRecognitionService) og formaterer svaret tilbage til klienten/orkestratoren. Web kender kun applikationens kontrakter og interfaces – ikke de tekniske adaptere.

Application rummer kontrakter (DTO’er), porte (interfaces) og selve use casen (RecognitionService). Controller-adapteren kalder IRecognitionService, og implementeringen sørger for at hente billedet fra den presigned URL, kalde vision-tjenesten via sine udgående porte og samle et rent svar. Application indeholder ingen SDK’er eller netværksdetaljer.

Infrastructure (driven side) implementerer applikationens udgående porte: f.eks. HttpImageFetcher til at hente bytes og GoogleVisionAnalyzer til at kalde AI-udbyderen. Her ligger også konfiguration. Udbydere kan skiftes uden at ændre Web eller Contracts.

Flow i én linje: Orchestrator → Web (controller) → Application (use case) → Infrastructure (adaptere) → tilbage gennem Application → Web → svar.

Videre plan

Uge 36: Arbejde videre med implementering baseret på de opstillede læringsmål.

Ressourcer