Go aplikace mohou kombinovat mnoho různých typů souborů zdrojového kódu, takže použití pevné, konvenční struktury má mnoho výhod.
Šestihranná architektura (neboli „porty a adaptéry“) je oblíbeným vzorem softwarové architektury, který můžete použít při vytváření aplikací Go. Pomocí něj můžete zlepšit škálovatelnost, udržovatelnost a testovatelnost své aplikace.
Tato architektura pomáhá oddělit obchodní logiku od externích závislostí a infrastruktury, díky čemuž je vaše aplikace flexibilní a snadněji se udržuje.
Co je hexagonální architektura?
Šestihranná architektura rozděluje aplikace do tří hlavních vrstev:
- TheAplikační vrstva obsahuje základní logiku aplikace nezávislou na jakýchkoli závislostech třetích stran. Aplikační vrstva by měla obsahovat vaši obchodní logiku, modely domény a aplikační služby.
- TheVrstva portů a adaptérů obsahuje adaptéry spolupracující se stávajícími aplikacemi. Porty jsou rozhraní, která definují operace pro vaši aplikaci, zatímco adaptéry jsou implementacemi rozhraní. Adaptéry mohou být databáze, HTTP API, zprostředkovatelé zpráv nebo jakýkoli jiný externí systém.
- Vrstva Infrastruktura obsahuje implementaci adaptérů. Vrstva infrastruktury by měla zahrnovat databáze, zprostředkovatele zpráv a další externí systémy.
Výhody použití hexagonální architektury
Šestihranná architektura je oblíbená pro následující výhody, které nabízí.
Škálovatelnost a udržovatelnost projektu
Rozdělení vašich aplikací umožňuje modulární a oddělenou kódovou základnu, která usnadňuje škálování a údržbu vaší aplikace.
Adaptéry můžete odebrat bez ovlivnění logiky jádra a upravit logiku jádra bez ovlivnění adaptérů. To znamená, že můžete snadno vyměnit adaptéry bez přepisování celé aplikace.
Testovatelnost a snadná integrace
Šestihranná architektura podporuje testovatelnost, protože můžete psát testy jednotek pro základní logiku bez zesměšňování externích závislostí. Testovací dvojky, jako jsou padělky nebo útržky, můžete použít, aniž byste museli nastavit databázi nebo zprostředkovatel zpráv.
Šestihranná architektura také usnadňuje integraci vaší aplikace s jinými systémy. Protože jsou adaptéry oddělené od základní logiky, můžete je znovu použít v jiných aplikacích nebo pro mikroslužby. Můžete také vystavit rozhraní API portu vaší aplikace pro použití v jiných systémech.
Flexibilita a přizpůsobivost měnícím se požadavkům
Šestihranná architektura poskytuje flexibilitu a přizpůsobivost měnícím se požadavkům. Protože logika jádra je nezávislá na adaptérech, můžete snadno upravit nebo rozšířit funkčnost aplikace, aniž byste ovlivnili adaptéry.
Svou aplikaci můžete v průběhu času vyvíjet a držet se konkrétních externích systémů.
Go a Hexagonal Architecture
V jádru je šestiúhelníková architektura o oddělení hlavní obchodní logiky aplikace od infrastruktury, takže můžete vyměňovat závislosti bez ovlivnění základní logiky aplikace, což usnadňuje údržbu a testování aplikace.
Typická hexagonální aplikace Go používá čtyři hlavní adresáře: cmd, vnitřní, bal, a prodejce.
The cmd adresář obsahuje hlavní aplikace projektu. Kód, který zde napíšete, bude obvykle volat funkce ze souborů v pkg a interních adresářích.
The vnitřní adresář by měl obsahovat soukromý kód aplikace, který nechcete, aby uživatelé importovali do své aplikace. Kompilátor Go vynucuje vnitřní vzor rozložení a v jiných adresářích můžete mít libovolný počet interních adresářů. Nejste omezeni na interní adresář nejvyšší úrovně.
The bal adresář by měl obsahovat kód knihovny, kterou mají externí aplikace importovat a používat. Přestože pomocí bal adresář je běžnou praxí, není všeobecně přijímán ani vynucován.
The prodejce adresář by měl obsahovat závislosti aplikace (manuálně nebo automaticky spravované). Můžete použít přejít na prodejce modu příkaz k vytvoření a /vendor adresář pro využití funkcí, které Go poskytuje dodavatelům.
Implementace Hexagonal Architecture in Go
Struktura souboru vašeho projektu je důležitá při implementaci hexagonální architektury v jakémkoli jazyce, včetně Go.
Zde je příklad struktury souborů pro implementaci Hexagonal Architecture v Go:
.
├── cmd
│ └── http
│ └── main.go
├── vnitřní
│ ├── adaptéry
│ │ ├── api
│ │ │ └── api_adapter.go
│ │ └── databáze
│ │ └── db_adapter.go
│ ├── aplikace
│ │ ├── doména
│ │ │ ├── entity1.go
│ │ │ └── entity2.go
│ │ ├── porty
│ │ │ ├── vstup
│ │ │ │ ├── input_port1.go
│ │ │ │ └── input_port2.go
│ │ │ └── výstup
│ │ │ ├── output_port1.go
│ │ │ └── output_port2.go
│ │ └── případy použití
│ │ ├── usecase1.go
│ │ └── usecase2.go
├── bal
│ ├── vstup
│ │ ├── vstup1.go
│ │ └── vstup2.go
│ └── výstup
│ ├── výstup1.go
│ └── výstup2.go
└── prodejce
├── modul1
│ ├── soubor1.go
│ └── soubor2.go
└── modul2
├── soubor1.go
└── soubor2.go
The bal adresář obsahuje v tomto příkladu vstupní a výstupní porty vaší aplikace. V těchto souborech definujete rozhraní pro vstupní a výstupní porty.
The vnitřní adresář obsahuje doménu aplikace a případy použití. Do těchto souborů zapíšete obchodní logiku své aplikace.
The adaptéry adresář obsahuje kód infrastruktury, který připojuje vaši aplikaci k databázi a API.
Nastavení struktury souboru Hexagonal Architecture
Nastavení struktury souborů hexagonální architektury vašeho projektu může být těžkopádné, ale můžete napsat bash skript pro automatizaci procesu vytváření adresáře.
Spusťte tento příkaz v pracovním adresáři projektu vytvořit bash skript, šestiúhelníkový.sha udělte mu oprávnění ke čtení, zápisu a spouštění:
dotykový hexagonal.sh && chmod 777 hexagonal.sh
Zadejte tento bash kód šestiúhelníkový.sh pro vytvoření struktury souborů ve vašem aktuálním pracovním adresáři:
#!/bin/bash
# vytvořit adresáře nejvyšší úrovně
mkdir cmd interního dodavatele balíčků# vytvořit adresář cmd/http
mkdir cmd/http# vytvořit interní adresáře
mkdir interní/adapters internal/app internal/app/domain internal/app/ports internal/app/ports/input internal/app/ports/output internal/app/usecases# vytvořit interní adresáře/adresáře adaptérů
mkdir internal/adapters/api internal/adapters/database# vytvořit adresáře interní/app/ports
mkdir internal/app/ports/input internal/app/ports/output# vytvořit adresáře dodavatelů
mkdir vendor/module1 vendor/module2
# zpráva o úspěšném tisku
echo"Struktura adresáře byla úspěšně vytvořena."
Tento bash skript můžete spustit pomocí následujícího příkazu:
./šestihranný.sh
Program bash vytvoří složky a podsložky, takže můžete pokračovat ve vytváření souborů a psaní obchodní logiky pro vaši aplikaci.
Šestiúhelníková architektura je užitečná pro budování složitých aplikací
Implementace hexagonální architektury může být časově náročná, ale přínosy z dlouhodobého hlediska převažují nad náklady. Oddělením problémů a modulárnějším kódem můžete snadno udržovat a testovat své aplikace.
Existuje mnoho dalších architektonických vzorů, z nichž každý má své výhody a nevýhody pro vytváření flexibilních a výkonných aplikací. Patří mezi ně oblíbená architektura MVC (model, view, controller) pro tvorbu webových aplikací.