Arquitectura hexagonal
o Patrón de puertos y adaptadores
es un patrón de arquitectura que se ha popularizado últimamente.
Antes de continuar es importante conocer que es un patrón de arquitectura y dónde es que tiene lugar en la arquitectura de un sistema.
Un patrón de arquitectura (o estilo de arquitectura) describe la estructura del sistema. (Conocimiento de las características de arquitectura, decisiones de arquitectura y principios de diseño son necesarios para entender completamente la arquitectura de un sistema)
Características
|----------------------------|
Descisiones | Arquitectura de un sistema | Principios de diseño
|----------------------------|
Estructura
- Los patrónes son agnósticos a las tecnologías (incluyendo el propio lenguaje de programación).
- Los patrónes son más una idea conceptual que una una forma estricta forma de hacer las cosas. Por ejemplo: No definen el nombramiento de paquetes.
El patrón de arquitectura hexagonal propone que la lógica de negocio es el centro de todo.
- Todo depende de la lógica de negocio
- La lógica de negocio no depende de nada
- La lógica esta protegida del exterior
Es el lado a través del cual el usuario o los programas externos interactuarán con la aplicación. Contiene el código que permite estas interacciones. Típicamente, tu código de interfaz de usuario, tus rutas HTTP para una API, tus serializaciones JSON para programas que consumen tu aplicación están aquí. Este es el lado donde encontramos los actores que manejan la Lógica de Negocio (adaptadores primarios)
Contiene las entidades de negocio, reglas, procesos y casos de uso
Aquí es donde encontraremos lo que tu aplicación necesita, lo que impulsa para funcionar. Contiene detalles esenciales de la infraestructura, como el código que interactúa con tu base de datos, hace llamadas al sistema de archivos o el código que gestiona las llamadas HTTP a otras aplicaciones de las que dependes, por ejemplo. En este lado se encuentran los actores gestionados por la Lógica de Negocio (adaptadores secundarios)
|-----------| |---------| |---------|
| Izquierdo | ==> | Negocio | <== | Derecho |
|-----------| |---------| |---------|
Define el "cómo comunicarse con la lógica de negocio".
Un adaptador es responsable de comunicarse con el mundo exterior con la lógica de negocio a través de puertos definidos por la lógica de negocio.
- Adaptador primario (Conductor): Conduce a la lógica de negocio
- Adaptador secundario (Conducido): Son manejados por la Lógica de Negocio
.
├── cmd
│ └── {binary}
└── internal
├── business (Casos de uso, reglas de negocio y todo lo relacionado)
└── infrastructure
├── input (Todo lo relacionado con adaptadores primarios)
└── output (Todo lo relacionado con adaptadores secundarios)
"La suma del trabajo que se tiene que hacer en cada capa esta involucrada en el funcionamiento de una característica especifica"
.
├── cmd
│ └── {binary}
└── internal
└── {feature}
├── business
└── infrastructure
├── input
└── output
Hexagonal architecture - Dr. Alistair Cockburn
Hexagonal Architecture: three principles and an implementation example