Go-apps kan kombinere mange forskellige typer kildekodefiler, så brug af en solid, konventionel struktur har mange fordele.
Den sekskantede (eller "porte og adaptere") arkitektur er et populært softwarearkitekturmønster, du kan anvende, mens du bygger dine Go-apps. Ved at bruge det kan du forbedre din apps skalerbarhed, vedligeholdelse og testbarhed.
Denne arkitektur hjælper med at adskille forretningslogik fra eksterne afhængigheder og infrastruktur, hvilket gør din applikation fleksibel og lettere at vedligeholde.
Hvad er den sekskantede arkitektur?
Den sekskantede arkitektur opdeler applikationer i tre hovedlag:
- DetAnvendelseslag rummer applikationens kernelogik uafhængig af eventuelle tredjepartsafhængigheder. Applikationslaget bør indeholde din forretningslogik, domænemodeller og applikationstjenester.
- DetPorte og adaptere lag rummer adaptere, der interagerer med de eksisterende applikationer. Porte er grænseflader, der definerer operationerne for din applikation, mens adaptere er implementeringer af grænsefladerne. Adaptere kan være databaser, HTTP API'er, meddelelsesmæglere eller ethvert andet eksternt system.
- Infrastrukturlaget huser implementeringen af adapterne. Infrastrukturlaget bør omfatte databaser, meddelelsesmæglere og andre eksterne systemer.
Fordele ved at bruge den sekskantede arkitektur
Den sekskantede arkitektur er populær for følgende fordele, den giver.
Projektskalerbarhed og vedligeholdelse
Opdelingen af dine applikationer giver mulighed for en modulær og afkoblet kodebase, der gør det nemmere at skalere og vedligeholde din app.
Du kan fjerne adaptere uden at påvirke kernelogikken og ændre kernelogikken uden at påvirke adapterne. Det betyder, at du nemt kan udskifte adaptere uden at omskrive hele din applikation.
Testbarhed og nem integration
Den sekskantede arkitektur fremmer testbarhed, da du kan skrive enhedstests for kernelogik uden falske eksterne afhængigheder. Du kan bruge testdobler, såsom forfalskninger eller stubber, uden at skulle oprette en database eller meddelelsesmægler.
Den sekskantede arkitektur gør det også nemt at integrere din applikation med andre systemer. Da adapterne er adskilt fra kernelogikken, kan du genbruge dem i andre applikationer eller til mikrotjenester. Du kan også eksponere din applikations ports API'er for forbrug i andre systemer.
Fleksibilitet og tilpasningsevne til skiftende krav
Den sekskantede arkitektur giver fleksibilitet og tilpasningsevne til skiftende krav. Da kernelogikken er uafhængig af adapterne, kan du nemt ændre eller udvide applikationens funktionalitet uden at påvirke adapterne.
Du kan udvikle din app over tid ved at holde dig til specifikke eksterne systemer.
Gå og den sekskantede arkitektur
I kernen handler den sekskantede arkitektur om at adskille applikationens kerneforretningslogik fra infrastruktur, så du kan udskifte afhængigheder uden at påvirke applikationens kernelogik, hvilket gør det nemmere at vedligeholde og teste Ansøgning.
Den typiske sekskantede Go-applikation bruger fire hovedmapper: cmd, indre, pkg, og sælger.
Det cmd biblioteket indeholder de vigtigste applikationer for projektet. Koden du skriver her vil typisk kalde funktioner fra filer i pkg og interne mapper.
Det indre bibliotek skal indeholde en privat applikationskode, som du ikke ønsker, at brugerne skal importere til deres applikation. Go-kompileren håndhæver det interne layoutmønster, og du kan have så mange interne mapper i andre mapper, som du vil. Du er ikke begrænset til en intern mappe på øverste niveau.
Det pkg bibliotek skal indeholde den bibliotekskode, du ønsker, at eksterne programmer skal importere og bruge. Selvom du bruger pkg bibliotek er almindelig praksis, det er ikke universelt accepteret eller håndhævet.
Det sælger bibliotek skal indeholde applikationsafhængigheder (manuelt eller automatisk administreret). Du kan bruge go mod leverandør kommando for at oprette en /vendor bibliotek for at udnytte de funktionaliteter, Go tilbyder for leverandører.
Implementering af den sekskantede arkitektur i Go
Dit projekts filstruktur er vigtig, når du implementerer sekskantet arkitektur på ethvert sprog, inklusive Go.
Her er et eksempel på en filstruktur til implementering af Hexagonal Architecture in Go:
.
├── cmd
│ └── http
│ └── main.go
├── intern
│ ├── adaptere
│ │ ├── api
│ │ │ └── api_adapter.go
│ │ └── database
│ │ └── db_adapter.go
│ ├── app
│ │ ├── domæne
│ │ │ ├── enhed1.go
│ │ │ └── enhed2.go
│ │ ├── porte
│ │ │ ├── input
│ │ │ │ ├── input_port1.go
│ │ │ │ └── input_port2.go
│ │ │ └── output
│ │ │ ├── output_port1.go
│ │ │ └── output_port2.go
│ │ └── usecases
│ │ ├── usecase1.go
│ │ └── usecase2.go
├── pk
│ ├── input
│ │ ├── input1.go
│ │ └── input2.go
│ └── output
│ ├── output1.go
│ └── output2.go
└── sælger
├── modul1
│ ├── file1.go
│ └── file2.go
└── modul2
├── file1.go
└── file2.go
Det pkg biblioteket indeholder dit programs input- og outputporte i dette eksempel. Du definerer grænseflader til input- og outputporte i disse filer.
Det indre biblioteket indeholder applikationsdomænet og use cases. Du skriver din applikations forretningslogik i disse filer.
Det adaptere biblioteket indeholder infrastrukturkoden, der forbinder din applikation med databasen og API.
Opsætning af den sekskantede arkitekturfilstruktur
Det kan være besværligt at opsætte dit projekts sekskantede arkitekturfilstruktur, men du kan skrive et bash-script for at automatisere mappeoprettelsesprocessen.
Kør denne kommando i dit projekts arbejdsmappe til oprette et bash-script, sekskantet.sh, og giv læse-, skrive- og eksekveringstilladelser til det:
touch hexagonal.sh && chmod 777 hexagonal.sh
Indtast denne bash-kode sekskantet.sh for at oprette filstrukturen i din nuværende arbejdsmappe:
#!/bin/bash
# opret mapper på øverste niveau
mkdir cmd intern pkg leverandør# opret cmd/http-mappe
mkdir cmd/http# opret interne mapper
mkdir intern/adaptere intern/app intern/app/domæne intern/app/porte intern/app/porte/input intern/app/porte/output intern/app/usecases# opret interne/adaptere mapper
mkdir intern/adaptere/api intern/adaptere/database# opret interne / app / porte mapper
mkdir internal/app/ports/input internal/app/ports/output# opret leverandørmapper
mkdir leverandør/modul1 leverandør/modul2
# udskriv succesmeddelelse
ekko"Mappestruktur blev oprettet med succes."
Du kan køre dette bash-script med følgende kommando:
./hexagonal.sh
Bash-programmet opretter mapperne og undermapperne, så du kan fortsætte med at oprette filer og skrive forretningslogikken til din applikation.
Den sekskantede arkitektur er praktisk til at bygge komplekse applikationer
Implementering af den sekskantede arkitektur kan være tidskrævende, men fordelene opvejer omkostningerne i det lange løb. Ved at adskille bekymringer og gøre din kode mere modulær, kan du nemt vedligeholde og teste dine applikationer.
Der er mange andre arkitektoniske mønstre, hver med fordele og ulemper for at bygge fleksible, effektive applikationer. Disse omfatter den populære MVC-arkitektur (model, view, controller) til at skabe webapplikationer.