Os aplicativos Go podem combinar muitos tipos diferentes de arquivo de código-fonte, portanto, usar uma estrutura sólida e convencional traz muitos benefícios.

A arquitetura hexagonal (ou "portas e adaptadores") é um padrão de arquitetura de software popular que você pode aplicar ao criar seus aplicativos Go. Usando-o, você pode melhorar a escalabilidade, capacidade de manutenção e capacidade de teste do seu aplicativo.

Essa arquitetura ajuda a separar a lógica de negócios das dependências externas e da infraestrutura, tornando seu aplicativo flexível e mais fácil de manter.

O que é a arquitetura hexagonal?

A arquitetura hexagonal divide os aplicativos em três camadas principais:

  1. OCamada de aplicação abriga a lógica principal do aplicativo independente de quaisquer dependências de terceiros. A camada de aplicativo deve conter sua lógica de negócios, modelos de domínio e serviços de aplicativo.
  2. OCamada de portas e adaptadores abriga os adaptadores que interagem com os aplicativos existentes. As portas são interfaces que definem as operações para seu aplicativo, enquanto os adaptadores são implementações das interfaces. Os adaptadores podem ser bancos de dados, APIs HTTP, intermediários de mensagens ou qualquer outro sistema externo.
    instagram viewer
  3. A camada de infraestrutura abriga a implementação dos adaptadores. A camada de infraestrutura deve incluir bancos de dados, intermediários de mensagens e outros sistemas externos.

Vantagens de usar a arquitetura hexagonal

A arquitetura hexagonal é popular pelas seguintes vantagens que oferece.

Escalabilidade e Manutenibilidade do Projeto

A divisão de seus aplicativos permite uma base de código modular e desacoplada que facilita o dimensionamento e a manutenção do seu aplicativo.

Você pode remover adaptadores sem afetar a lógica do núcleo e modificar a lógica do núcleo sem afetar os adaptadores. Isso significa que você pode facilmente substituir os adaptadores sem reescrever todo o seu aplicativo.

Testabilidade e facilidade de integração

A arquitetura hexagonal promove a capacidade de teste, pois você pode escrever testes de unidade para a lógica principal sem simular dependências externas. Você pode usar dublês de teste, como falsificações ou stubs, sem precisar configurar um banco de dados ou corretor de mensagens.

A arquitetura hexagonal também facilita a integração de seu aplicativo com outros sistemas. Como os adaptadores são separados da lógica principal, você pode reutilizá-los em outros aplicativos ou para microsserviços. Você também pode expor as APIs da porta do seu aplicativo para consumo em outros sistemas.

Flexibilidade e Adaptabilidade a Mudanças de Requisitos

A arquitetura hexagonal fornece flexibilidade e adaptabilidade a requisitos em constante mudança. Como a lógica principal é independente dos adaptadores, você pode modificar ou estender facilmente a funcionalidade do aplicativo sem afetar os adaptadores.

Você pode evoluir seu aplicativo ao longo do tempo, aderindo a sistemas externos específicos.

Go e a Arquitetura Hexagonal

No fundo, a arquitetura hexagonal trata de separar a lógica de negócios principal do aplicativo da infraestrutura para que você pode trocar as dependências sem afetar a lógica principal do aplicativo, facilitando a manutenção e o teste do aplicativo.

O aplicativo Go hexagonal típico usa quatro diretórios principais: cmd, interno, pacote, e fornecedor.

O cmd O diretório contém os principais aplicativos do projeto. O código que você escreve aqui normalmente chamará funções de arquivos no pacote e diretórios internos.

O interno O diretório deve conter um código de aplicativo privado que você não deseja que os usuários importem para o aplicativo. O compilador Go aplica o padrão de layout interno e você pode ter quantos diretórios internos em outros diretórios quiser. Você não está limitado a um diretório interno de nível superior.

O pacote O diretório deve conter o código da biblioteca que você deseja que os aplicativos externos importem e usem. Embora usando o pacote diretório é uma prática comum, não é universalmente aceito ou aplicado.

O fornecedor O diretório deve conter dependências de aplicativos (manual ou automaticamente gerenciadas). Você pode usar o vá fornecedor mod comando para criar um /vendor diretório para alavancar as funcionalidades que o Go oferece aos fornecedores.

Implementando a arquitetura hexagonal em Go

A estrutura de arquivos do seu projeto é importante ao implementar a arquitetura hexagonal em qualquer linguagem, incluindo Go.

Aqui está um exemplo de estrutura de arquivo para implementar a Arquitetura Hexagonal em Go:

.
├── cmd
│ └── http
│ └── main.go
├── interno
│ ├── adaptadores
│ │ ├── API
│ │ │ └── api_adapter.go
│ │ └── banco de dados
│ │ └── db_adapter.go
│ ├── aplicativo
│ │ ├── domínio
│ │ │ ├── entidade1.go
│ │ │ └── entidade2.go
│ │ ├── portas
│ │ │ ├── entrada
│ │ │ │ ├── input_port1.go
│ │ │ │ └── input_port2.go
│ │ │ └── saída
│ │ │ ├── output_port1.go
│ │ │ └── output_port2.go
│ │ └── casos de uso
│ │ ├── usecase1.go
│ │ └── usecase2.go
├── pacote
│ ├── entrada
│ │ ├── input1.go
│ │ └── input2.go
│ └── saída
│ ├── output1.go
│ └── output2.go
└── fornecedor
├── módulo1
│ ├── arquivo1.go
│ └── arquivo2.go
└── módulo2
├── arquivo1.go
└── arquivo2.go

O pacote diretório contém as portas de entrada e saída do seu aplicativo neste exemplo. Você definirá interfaces para portas de entrada e saída nesses arquivos.

O interno O diretório contém o domínio do aplicativo e os casos de uso. Você escreverá a lógica de negócios do seu aplicativo nesses arquivos.

O adaptadores O diretório contém o código de infraestrutura que conecta seu aplicativo ao banco de dados e à API.

Configurando a estrutura de arquivo de arquitetura hexagonal

Configurar a estrutura de arquivo de arquitetura hexagonal do seu projeto pode ser complicado, mas você pode escrever um script bash para automatizar o processo de criação de diretório.

Execute este comando no diretório de trabalho do seu projeto para criar um script bash, hexagonal.she conceda permissões de leitura, gravação e execução a ele:

touch hexagonal.sh && chmod 777 hexagonal.sh

Digite este código bash em hexagonal.sh para criar a estrutura de arquivo em seu diretório de trabalho atual:

#!/bin/bash

# cria diretórios de nível superior
mkdir cmd fornecedor de pacote interno

# cria o diretório cmd/http
mkdir cmd/http

# cria diretórios internos
mkdir interno/adaptadores internos/aplicativo interno/aplicativo/domínio interno/aplicativo/portas internas/aplicativo/portas/entrada interna/aplicativo/portas/saída interna/aplicativo/casos de uso

# cria diretórios internos/adaptadores
mkdir interno/adaptadores/api interno/adaptadores/banco de dados

# cria diretórios internos/app/ports
mkdir interno/aplicativo/portas/entrada interno/aplicativo/portas/saída

# cria diretórios de fornecedores
mkdir fornecedor/módulo1 fornecedor/módulo2

# imprimir mensagem de sucesso
eco"Estrutura de diretório criada com sucesso."

Você pode executar este script bash com o seguinte comando:

./hexagonal.sh

O programa bash cria as pastas e subpastas para que você possa criar arquivos e escrever a lógica de negócios para seu aplicativo.

A arquitetura hexagonal é útil para criar aplicativos complexos

A implementação da arquitetura hexagonal pode ser demorada, mas os benefícios superam o custo a longo prazo. Ao separar as preocupações e tornar seu código mais modular, você pode facilmente manter e testar seus aplicativos.

Existem muitos outros padrões de arquitetura, cada um com prós e contras para a construção de aplicativos flexíveis e de alto desempenho. Isso inclui a popular arquitetura MVC (model, view, controller) para criar aplicativos da web.