Las aplicaciones Go pueden combinar muchos tipos diferentes de archivos de código fuente, por lo que usar una estructura sólida y convencional tiene muchos beneficios.

La arquitectura hexagonal (o "puertos y adaptadores") es un patrón de arquitectura de software popular que puede aplicar a medida que crea sus aplicaciones Go. Al usarlo, puede mejorar la escalabilidad, la capacidad de mantenimiento y la capacidad de prueba de su aplicación.

Esta arquitectura ayuda a separar la lógica comercial de las dependencias e infraestructuras externas, lo que hace que su aplicación sea flexible y más fácil de mantener.

¿Qué es la arquitectura hexagonal?

La arquitectura hexagonal divide las aplicaciones en tres capas principales:

  1. ElCapa de aplicación alberga la lógica central de la aplicación independientemente de las dependencias de terceros. La capa de aplicación debe contener su lógica comercial, modelos de dominio y servicios de aplicación.
  2. ElCapa de puertos y adaptadores alberga los adaptadores que interactúan con las aplicaciones existentes. Los puertos son interfaces que definen las operaciones de su aplicación, mientras que los adaptadores son implementaciones de las interfaces. Los adaptadores pueden ser bases de datos, API HTTP, intermediarios de mensajes o cualquier otro sistema externo.
    instagram viewer
  3. La capa de infraestructura alberga la implementación de los adaptadores. La capa de infraestructura debe incluir bases de datos, intermediarios de mensajes y otros sistemas externos.

Ventajas de usar la arquitectura hexagonal

La arquitectura hexagonal es popular por las siguientes ventajas que ofrece.

Escalabilidad y mantenibilidad del proyecto

La división de sus aplicaciones permite una base de código modular y desacoplada que facilita el escalado y el mantenimiento de su aplicación.

Puede eliminar adaptadores sin afectar la lógica central y modificar la lógica central sin afectar los adaptadores. Esto significa que puede reemplazar fácilmente los adaptadores sin tener que volver a escribir toda la aplicación.

Comprobabilidad y facilidad de integración

La arquitectura hexagonal promueve la capacidad de prueba, ya que puede escribir pruebas unitarias para la lógica central sin dependencias externas simuladas. Puede usar dobles de prueba, como falsificaciones o stubs, sin tener que configurar una base de datos o intermediario de mensajes.

La arquitectura hexagonal también facilita la integración de su aplicación con otros sistemas. Dado que los adaptadores están separados de la lógica central, puede reutilizarlos en otras aplicaciones o para microservicios. También puede exponer las API del puerto de su aplicación para su consumo en otros sistemas.

Flexibilidad y adaptabilidad a los requisitos cambiantes

La arquitectura hexagonal proporciona flexibilidad y adaptabilidad a los requisitos cambiantes. Dado que la lógica principal es independiente de los adaptadores, puede modificar o ampliar fácilmente la funcionalidad de la aplicación sin afectar a los adaptadores.

Puede evolucionar su aplicación con el tiempo, adhiriéndose a sistemas externos específicos.

Go y la Arquitectura Hexagonal

En esencia, la arquitectura hexagonal se trata de separar la lógica comercial central de la aplicación de la infraestructura para que puede intercambiar dependencias sin afectar la lógica central de la aplicación, lo que facilita el mantenimiento y la prueba de la solicitud.

La típica aplicación Go hexagonal utiliza cuatro directorios principales: cmd, interno, paquete, y proveedor.

El cmd El directorio contiene las principales aplicaciones del proyecto. El código que escriba aquí normalmente llamará a funciones desde archivos en los directorios pkg e internos.

El interno El directorio debe contener un código de aplicación privado que no desea que los usuarios importen a su aplicación. El compilador de Go aplica el patrón de diseño interno y puede tener tantos directorios internos en otros directorios como desee. No está limitado a un directorio interno de nivel superior.

El paquete El directorio debe contener el código de la biblioteca que desea que las aplicaciones externas importen y usen. Aunque usando el paquete directorio es una práctica común, no se acepta ni se aplica universalmente.

El proveedor El directorio debe contener las dependencias de la aplicación (administradas de forma manual o automática). Puedes usar el ir proveedor mod Comando para crear un /vendor directorio para aprovechar las funcionalidades que Go proporciona a los proveedores.

Implementando la Arquitectura Hexagonal en Go

La estructura de archivos de su proyecto es importante al implementar la arquitectura hexagonal en cualquier idioma, incluido Go.

Aquí hay una estructura de archivo de ejemplo para implementar la arquitectura hexagonal en Go:

.
├── cmd
│ └── http
│ └── principal.ir
├── interno
│ ├── adaptadores
│ │ ├── API
│ │ │ └── api_adapter.go
│ │ └── base de datos
│ │ └── db_adapter.go
│ ├── aplicación
│ │ ├── dominio
│ │ │ ├── entidad1.ir
│ │ │ └── entidad2.ir
│ │ ├── puertos
│ │ │ ├── entrada
│ │ │ │ ├── entrada_puerto1.ir
│ │ │ │ └── entrada_puerto2.ir
│ │ │ └── salida
│ │ │ ├── salida_puerto1.ir
│ │ │ └── salida_puerto2.ir
│ │ └── casos de uso
│ │ ├── usecase1.go
│ │ └── usecase2.go
├── paquete
│ ├── entrada
│ │ ├── entrada1.ir
│ │ └── entrada2.ir
│ └── salida
│ ├── salida1.ir
│ └── salida2.ir
└── vendedor
├── módulo1
│ ├── archivo1.ir
│ └── archivo2.ir
└── módulo2
├── archivo1.ir
└── archivo2.ir

El paquete El directorio contiene los puertos de entrada y salida de su aplicación en este ejemplo. Definirá interfaces para puertos de entrada y salida en estos archivos.

El interno El directorio contiene el dominio de la aplicación y los casos de uso. Escribirá la lógica comercial de su aplicación en estos archivos.

El adaptadores El directorio contiene el código de infraestructura que conecta su aplicación a la base de datos y la API.

Configuración de la estructura del archivo de arquitectura hexagonal

Configurar la estructura de archivos de arquitectura hexagonal de su proyecto puede ser engorroso, pero puede escribir un script bash para automatizar el proceso de creación de directorios.

Ejecute este comando en el directorio de trabajo de su proyecto para crear un script bash, hexagonal.shy concederle permisos de lectura, escritura y ejecución:

toque hexagonal.sh && chmod 777 hexagonal.sh

Introduzca este código bash en hexagonal.sh para crear la estructura de archivos en su directorio de trabajo actual:

#!/bin/bash

# crear directorios de nivel superior
mkdir cmd proveedor de paquete interno

# crear directorio cmd/http
mkdir cmd/http

# crear directorios internos
mkdir interno/adaptadores internos/aplicación interna/aplicación/dominio interno/aplicación/puertos internos/aplicación/puertos/entrada interna/aplicación/puertos/salida interna/aplicación/casos de uso

# crear directorios internos/adaptadores
mkdir interno/adaptadores/api interno/adaptadores/base de datos

# crear directorios internos/aplicaciones/puertos
mkdir interno/aplicación/puertos/entrada interno/aplicación/puertos/salida

# crear directorios de proveedores
mkdir proveedor/módulo1 proveedor/módulo2

# imprimir mensaje de exito
eco"Estructura de directorio creada con éxito".

Puede ejecutar este script bash con el siguiente comando:

./hexagonal.sh

El programa bash crea las carpetas y subcarpetas para que pueda proceder a crear archivos y escribir la lógica comercial para su aplicación.

La arquitectura hexagonal es útil para crear aplicaciones complejas

La implementación de la arquitectura hexagonal puede llevar mucho tiempo, pero los beneficios superan el costo a largo plazo. Al separar las preocupaciones y hacer que su código sea más modular, puede mantener y probar sus aplicaciones fácilmente.

Hay muchos otros patrones arquitectónicos, cada uno con ventajas y desventajas para crear aplicaciones flexibles y de alto rendimiento. Estos incluyen la popular arquitectura MVC (modelo, vista, controlador) para crear aplicaciones web.