Arquitectura Hexagonal (o puertos y adaptadores)
¿Qué es la arquitectura hexagonal?
El desarrollo de un proyecto puede enfocarse de muchas maneras, muchas ya conocidas como el enfoque REST, el modelo MVC, SPA…y otras muchas que cada día se establecen como estándares por diversos motivos.
Una de las arquitecturas mejor consideradas en la actualidad es la hexagonal, conocida también como arquitectura de puertos y adaptadores, cuyo nombre se debe al deseo de representar las múltiples entradas y salidas del sistema representando además su simetría, dado que los elementos conectados con la capa externa deben ser reemplazables.
Para entender el modelo de esta arquitectura nos apoyaremos en su representación gráfica, el modelo de tres anillos:
Aquí podemos apreciar tres capas claramente diferenciadas:
- Dominio: La capa en la que se define la lógica de la aplicación.
- Aplicación: Aquí se implementa la lógica.
- Infraestructura: Ubicación de los elementos de conexión con servicios externos.
Y ahora podemos hablar de lo que realmente caracteriza a esta arquitectura, que es la abstracción entre niveles, un anillo no interactúa con los otros directamente, lo hacen a través de interfaces e implementaciones o lo que es lo mismo «puestos y adaptadores», de este modo interactúan sin conocer sus detalles.
El gran valor de la arquitectura hexagonal reside en su completa búsqueda de los principios SOLID (ver más sobre SOLID).
¿Qué anillos pueden interactuar con los otros?
Para la interacción se sigue la norma de que cada anillo solo puede interactuar con el más interno inmediato, es decir:
- Infraestructura puede interactuar con aplicación y consigo mismo.
- Aplicación puede interactuar con Dominio y consigo mismo.
- Dominio solo interactúa consigo mismo.
Conocemos ahora el modelo de manera teórica, pero… ¿Cuándo implementar esta arquitectura?
Esta es una decisión que depende mucho del proyecto, generalmente se integra en sistema de los que se esperan unos requisitos escalables o cambiantes, como puede ser la alternancia entre modelos relacionales y no relaciones de bases de datos.
En cuanto a la estructura de directorios, tampoco existe un consenso, puede aplicarse hexagonal sobre un modelo tradicional, se pueden dividir los archivos en tres carpetas con el nombre de cada anillo, hay quien prefiere utilizar «vertical slicing» y que los directorios padre sean las entidades de las que descienden individualmente infraestructura, aplicación y dominio…etc.
Ver más sobre esta arquitectura: aquí.