Le app Go possono combinare molti tipi diversi di file di codice sorgente, quindi l'utilizzo di una struttura solida e convenzionale ha molti vantaggi.
L'architettura esagonale (o "porte e adattatori") è un popolare modello di architettura software che puoi applicare mentre crei le tue app Go. Usandolo, puoi migliorare la scalabilità, la manutenibilità e la testabilità della tua app.
Questa architettura aiuta a separare la logica aziendale dalle dipendenze e dall'infrastruttura esterne, rendendo l'applicazione flessibile e più semplice da mantenere.
Qual è l'architettura esagonale?
L'architettura esagonale divide le applicazioni in tre livelli principali:
- ILLivello di applicazione ospita la logica di base dell'applicazione indipendentemente da eventuali dipendenze di terze parti. Il livello dell'applicazione deve contenere la logica aziendale, i modelli di dominio e i servizi dell'applicazione.
- ILStrato di porte e adattatori ospita gli adattatori che interagiscono con le applicazioni esistenti. Le porte sono interfacce che definiscono le operazioni per la tua applicazione, mentre gli adattatori sono implementazioni delle interfacce. Gli adattatori possono essere database, API HTTP, broker di messaggi o qualsiasi altro sistema esterno.
- Il livello Infrastruttura ospita l'implementazione degli adattatori. Il livello dell'infrastruttura dovrebbe includere database, broker di messaggi e altri sistemi esterni.
Vantaggi dell'utilizzo dell'architettura esagonale
L'architettura esagonale è popolare per i seguenti vantaggi che offre.
Scalabilità e manutenibilità del progetto
La divisione delle tue applicazioni consente una base di codice modulare e disaccoppiata che semplifica la scalabilità e la manutenzione della tua app.
È possibile rimuovere gli adattatori senza influire sulla logica principale e modificare la logica principale senza influire sugli adattatori. Ciò significa che è possibile sostituire facilmente gli adattatori senza riscrivere l'intera applicazione.
Testabilità e facilità di integrazione
L'architettura esagonale promuove la testabilità poiché è possibile scrivere unit test per la logica di base senza finte dipendenze esterne. Puoi usare i doppi di prova, come falsi o matrici, senza doverlo fare impostare una banca dati o broker di messaggi.
L'architettura esagonale semplifica inoltre l'integrazione dell'applicazione con altri sistemi. Poiché gli adattatori sono separati dalla logica di base, puoi riutilizzarli in altre applicazioni o per microservizi. Puoi anche esporre le API della porta della tua applicazione per l'utilizzo in altri sistemi.
Flessibilità e adattabilità alle mutevoli esigenze
L'architettura esagonale offre flessibilità e adattabilità alle mutevoli esigenze. Poiché la logica di base è indipendente dagli adattatori, è possibile modificare o estendere facilmente la funzionalità dell'applicazione senza influire sugli adattatori.
Puoi far evolvere la tua app nel tempo, attenendoti a specifici sistemi esterni.
Vai e l'architettura esagonale
Al centro, l'architettura esagonale riguarda la separazione della logica di business principale dell'applicazione dall'infrastruttura in modo che puoi sostituire le dipendenze senza influire sulla logica di base dell'applicazione, semplificando la manutenzione e il test del file applicazione.
La tipica applicazione Go esagonale utilizza quattro directory principali: cmd, interno, conf, E venditore.
IL cmd directory contiene le principali applicazioni per il progetto. Il codice che scrivi qui in genere chiamerà funzioni dai file nelle directory pkg e interne.
IL interno directory deve contenere un codice dell'applicazione privato che non si desidera che gli utenti importino nella loro applicazione. Il compilatore Go applica il modello di layout interno e puoi avere tutte le directory interne in altre directory che desideri. Non sei limitato a una directory interna di primo livello.
IL conf directory deve contenere il codice della libreria che si desidera che le applicazioni esterne importino e utilizzino. Pur utilizzando il conf directory è una pratica comune, non è universalmente accettata o applicata.
IL venditore la directory deve contenere le dipendenze dell'applicazione (gestite manualmente o automaticamente). Puoi usare il vai venditore di mod comando per creare un /vendor directory per sfruttare le funzionalità che Go fornisce ai fornitori.
Implementazione dell'architettura esagonale in Go
La struttura dei file del tuo progetto è importante quando si implementa l'architettura esagonale in qualsiasi linguaggio, incluso Go.
Ecco una struttura di file di esempio per l'implementazione dell'architettura esagonale in Go:
.
├── cmd
│ └── http
│ └── main.go
├── interno
│ ├── adattatori
│ │ ├── API
│ │ │ └── api_adapter.go
│ │ └── banca dati
│ │ └── db_adapter.go
│ ├── app
│ │ ├── dominio
│ │ │ ├── entità1.go
│ │ │ └── entità2.go
│ │ ├── porte
│ │ │ ├── ingresso
│ │ │ │ ├── input_port1.go
│ │ │ │ └── input_port2.go
│ │ │ └── uscita
│ │ │ ├── output_port1.go
│ │ │ └── output_port2.go
│ │ └── casi d'uso
│ │ ├── usecase1.go
│ │ └── usecase2.go
├── conf
│ ├── ingresso
│ │ ├── ingresso1.go
│ │ └── ingresso2.go
│ └── uscita
│ ├── uscita1.go
│ └── output2.go
└── venditore
├── modulo1
│ ├── file1.go
│ └── file2.go
└── modulo2
├── file1.go
└── file2.go
IL conf directory contiene le porte di input e output dell'applicazione in questo esempio. Definirai le interfacce per le porte di input e output in questi file.
IL interno directory contiene il dominio dell'applicazione e i casi d'uso. Scriverai la logica aziendale della tua applicazione in questi file.
IL adattatori directory contiene il codice dell'infrastruttura che collega l'applicazione al database e all'API.
Impostazione della struttura del file dell'architettura esagonale
L'impostazione della struttura del file dell'architettura esagonale del tuo progetto può essere complicata, ma puoi scrivere uno script bash per automatizzare il processo di creazione della directory.
Esegui questo comando nella directory di lavoro del tuo progetto in creare uno script bash, esagonale.she concedi le autorizzazioni di lettura, scrittura ed esecuzione:
touch hexagonal.sh && chmod 777 hexagonal.sh
Inserisci questo codice bash esagonale.sh per creare la struttura del file nella directory di lavoro corrente:
#!/bin/bash
# crea directory di primo livello
mkdir cmd fornitore del pacchetto interno# crea la cartella cmd/http
mkdircmd/http# crea directory interne
mkdir internal/adapter internal/app internal/app/domain internal/app/ports internal/app/ports/input internal/app/ports/output internal/app/usecases# crea directory interne/adattatori
mkdir internal/adapters/api internal/adapters/database# crea le directory internal/app/ports
mkdir internal/app/ports/input internal/app/ports/output# crea elenchi di fornitori
mkdir venditore/modulo1 venditore/modulo2
# stampa messaggio di successo
eco"Struttura di directory creata correttamente."
Puoi eseguire questo script bash con il seguente comando:
./esagonale.sh
Il programma bash crea le cartelle e le sottocartelle in modo che tu possa procedere alla creazione di file e scrivere la logica aziendale per la tua applicazione.
L'architettura esagonale è utile per costruire applicazioni complesse
L'implementazione dell'architettura esagonale può richiedere molto tempo, ma a lungo termine i vantaggi superano i costi. Separando le preoccupazioni e rendendo il tuo codice più modulare, puoi facilmente mantenere e testare le tue applicazioni.
Esistono molti altri modelli architetturali, ciascuno con vantaggi e svantaggi per la creazione di applicazioni flessibili e performanti. Questi includono la popolare architettura MVC (modello, vista, controller) per la creazione di applicazioni web.