Go-Apps können viele verschiedene Arten von Quellcodedateien kombinieren, sodass die Verwendung einer soliden, herkömmlichen Struktur viele Vorteile hat.

Die hexagonale Architektur (oder „Ports und Adapter“) ist ein beliebtes Software-Architekturmuster, das Sie beim Erstellen Ihrer Go-Apps anwenden können. Damit können Sie die Skalierbarkeit, Wartbarkeit und Testbarkeit Ihrer App verbessern.

Diese Architektur trägt dazu bei, die Geschäftslogik von externen Abhängigkeiten und der Infrastruktur zu trennen, wodurch Ihre Anwendung flexibler und einfacher zu warten ist.

Was ist die sechseckige Architektur?

Die sechseckige Architektur unterteilt Anwendungen in drei Hauptschichten:

  1. DerAnwendungsschicht beherbergt die Kernlogik der Anwendung unabhängig von etwaigen Abhängigkeiten Dritter. Die Anwendungsschicht sollte Ihre Geschäftslogik, Domänenmodelle und Anwendungsdienste enthalten.
  2. DerPorts- und Adapterebene beherbergt die Adapter, die mit den vorhandenen Anwendungen interagieren. Ports sind Schnittstellen, die die Vorgänge für Ihre Anwendung definieren, während Adapter Implementierungen der Schnittstellen sind. Adapter können Datenbanken, HTTP-APIs, Nachrichtenbroker oder jedes andere externe System sein.
  3. Die Infrastrukturschicht beherbergt die Implementierung der Adapter. Die Infrastrukturschicht sollte Datenbanken, Nachrichtenbroker und andere externe Systeme umfassen.

Vorteile der Verwendung der hexagonalen Architektur

Die sechseckige Architektur ist wegen der folgenden Vorteile beliebt.

Projektskalierbarkeit und Wartbarkeit

Die Aufteilung Ihrer Anwendungen ermöglicht eine modulare und entkoppelte Codebasis, die die Skalierung und Wartung Ihrer App erleichtert.

Sie können Adapter entfernen, ohne die Kernlogik zu beeinträchtigen, und die Kernlogik ändern, ohne die Adapter zu beeinträchtigen. Dies bedeutet, dass Sie Adapter problemlos austauschen können, ohne Ihre gesamte Anwendung neu schreiben zu müssen.

Testbarkeit und einfache Integration

Die hexagonale Architektur fördert die Testbarkeit, da Sie Unit-Tests für die Kernlogik ohne simulierte externe Abhängigkeiten schreiben können. Sie können Test-Doubles wie Fakes oder Stubs verwenden, ohne dass dies erforderlich ist eine Datenbank einrichten oder Nachrichtenbroker.

Die hexagonale Architektur erleichtert zudem die Integration Ihrer Anwendung in andere Systeme. Da die Adapter von der Kernlogik getrennt sind, können Sie sie in anderen Anwendungen oder für Microservices wiederverwenden. Sie können die APIs des Ports Ihrer Anwendung auch für die Nutzung in anderen Systemen verfügbar machen.

Flexibilität und Anpassungsfähigkeit an sich ändernde Anforderungen

Die sechseckige Architektur bietet Flexibilität und Anpassungsfähigkeit an sich ändernde Anforderungen. Da die Kernlogik unabhängig von den Adaptern ist, können Sie die Funktionalität der Anwendung problemlos ändern oder erweitern, ohne dass dies Auswirkungen auf die Adapter hat.

Sie können Ihre App im Laufe der Zeit weiterentwickeln und dabei an bestimmten externen Systemen festhalten.

Go und die sechseckige Architektur

Im Kern geht es bei der hexagonalen Architektur darum, die Kerngeschäftslogik der Anwendung von der Infrastruktur zu trennen Sie können Abhängigkeiten austauschen, ohne die Kernlogik der Anwendung zu beeinträchtigen, was die Wartung und das Testen der Anwendung erleichtert Anwendung.

Die typische sechseckige Go-Anwendung verwendet vier Hauptverzeichnisse: cmd, intern, Pkg, Und Verkäufer.

Der cmd Das Verzeichnis enthält die Hauptanwendungen für das Projekt. Der Code, den Sie hier schreiben, ruft normalerweise Funktionen aus Dateien im Paket und in internen Verzeichnissen auf.

Der intern Das Verzeichnis sollte einen privaten Anwendungscode enthalten, den Benutzer nicht in ihre Anwendung importieren sollen. Der Go-Compiler erzwingt das interne Layoutmuster und Sie können so viele interne Verzeichnisse in anderen Verzeichnissen haben, wie Sie möchten. Sie sind nicht auf ein internes Verzeichnis der obersten Ebene beschränkt.

Der Pkg Das Verzeichnis sollte den Bibliothekscode enthalten, den externe Anwendungen importieren und verwenden sollen. Obwohl die Pkg Verzeichnis ist gängige Praxis, wird jedoch nicht allgemein akzeptiert oder durchgesetzt.

Der Verkäufer Das Verzeichnis sollte Anwendungsabhängigkeiten enthalten (manuell oder automatisch verwaltet). Du kannst den... benutzen Gehen Sie zum Mod-Anbieter Befehl zum Erstellen eines /vendor Verzeichnis, um die Funktionalitäten zu nutzen, die Go für Anbieter bereitstellt.

Implementierung der hexagonalen Architektur in Go

Die Dateistruktur Ihres Projekts ist wichtig, wenn Sie eine hexagonale Architektur in einer beliebigen Sprache, einschließlich Go, implementieren.

Hier ist eine Beispieldateistruktur für die Implementierung der Hexagonal-Architektur in Go:

.
├── cmd
│ └── http
│ └── main.go
├── intern
│ ├── Adapter
│ │ ├── API
│ │ │ └── api_adapter.go
│ │ └── Datenbank
│ │ └── db_adapter.go
│ ├── App
│ │ ├── Domäne
│ │ │ ├── entity1.go
│ │ │ └── entity2.go
│ │ ├── Häfen
│ │ │ ├── Eingabe
│ │ │ │ ├── input_port1.go
│ │ │ │ └── input_port2.go
│ │ │ └── Ausgabe
│ │ │ ├──output_port1.go
│ │ │ └──output_port2.go
│ │ └── Anwendungsfälle
│ │ ├── usecase1.go
│ │ └── usecase2.go
├── Pkg
│ ├── Eingabe
│ │ ├── input1.go
│ │ └── input2.go
│ └── Ausgabe
│ ├──output1.go
│ └──output2.go
└── Anbieter
├── Modul1
│ ├── file1.go
│ └── file2.go
└── Modul2
├── file1.go
└── file2.go

Der Pkg Das Verzeichnis enthält in diesem Beispiel die Eingabe- und Ausgabeports Ihrer Anwendung. In diesen Dateien definieren Sie Schnittstellen für Eingabe- und Ausgabeports.

Der intern Das Verzeichnis enthält die Anwendungsdomäne und Anwendungsfälle. In diese Dateien schreiben Sie die Geschäftslogik Ihrer Anwendung.

Der Adapter Das Verzeichnis enthält den Infrastrukturcode, der Ihre Anwendung mit der Datenbank und der API verbindet.

Einrichten der Dateistruktur der hexagonalen Architektur

Das Einrichten der Dateistruktur der hexagonalen Architektur Ihres Projekts kann mühsam sein, Sie können jedoch ein Bash-Skript schreiben, um den Verzeichniserstellungsprozess zu automatisieren.

Führen Sie diesen Befehl im Arbeitsverzeichnis Ihres Projekts aus Erstellen Sie ein Bash-Skript, sechseckig.shund erteilen Sie ihm Lese-, Schreib- und Ausführungsberechtigungen:

touch hexagonal.sh && chmod 777 hexagonal.sh

Geben Sie diesen Bash-Code ein sechseckig.sh So erstellen Sie die Dateistruktur in Ihrem aktuellen Arbeitsverzeichnis:

#!/bin/bash

# Verzeichnisse der obersten Ebene erstellen
mkdir cmd interner Paketanbieter

# cmd/http-Verzeichnis erstellen
mkdir cmd/http

# interne Verzeichnisse erstellen
mkdir internal/adapters internal/app internal/app/domain internal/app/ports internal/app/ports/input internal/app/ports/output internal/app/usecases

# Interne/Adapterverzeichnisse erstellen
mkdir internal/adapters/api internal/adapters/database

# Erstellen Sie interne/App/Ports-Verzeichnisse
mkdir internal/app/ports/input internal/app/ports/output

# Anbieterverzeichnisse erstellen
mkdir Anbieter/Modul1 Anbieter/Modul2

# Erfolgsmeldung drucken
Echo„Verzeichnisstruktur erfolgreich erstellt.“

Sie können dieses Bash-Skript mit dem folgenden Befehl ausführen:

./hexagonal.sh

Das Bash-Programm erstellt die Ordner und Unterordner, sodass Sie mit der Erstellung von Dateien und dem Schreiben der Geschäftslogik für Ihre Anwendung fortfahren können.

Die sechseckige Architektur ist praktisch für den Aufbau komplexer Anwendungen

Die Implementierung der hexagonalen Architektur kann zeitaufwändig sein, aber auf lange Sicht überwiegen die Vorteile die Kosten. Indem Sie Bedenken trennen und Ihren Code modularer gestalten, können Sie Ihre Anwendungen einfacher warten und testen.

Es gibt viele andere Architekturmuster mit jeweils Vor- und Nachteilen für die Erstellung flexibler, leistungsstarker Anwendungen. Dazu gehört die beliebte MVC-Architektur (Model, View, Controller) zur Erstellung von Webanwendungen.