Ekaterina Novoseltseva
¿Qué es la arquitectura Hexagonal? Definición y Ejemplos
Modelo Hexagonal en la arquitectura de Software
La arquitectura hexagonal junto con arquitectura de puertos y adaptadores es muy utilizada hoy en día, sin embargo la gente aun se confunde con el nombre y no conoce muy bien la diferencia entre ellos, cual es su valor añadido.
La arquitectura hexagonal es un estilo de arquitectura de software que mueve el foco de un programador desde un plano más conceptual hacia la distinción entre el interior y el exterior del software. La parte interior son los casos prácticos y el modelo domain está construido sobre ello. La parte exterior es UI, base de datos, mensajería, etc. La conexión entre el interior y el exterior es mediante puertos, y su implementación equivalente se conocen como adaptadores. Por esta razón, este estilo de arquitectura hexagonal se conoce habitualmente como Puertos y Adaptadores.
La arquitectura hexagonal promueve la separación de asuntos mediante la encapsulación de la lógica en diferentes capas de la aplicación. Esto permite un aislamiento de mayor nivel, testabilidad, y control sobre el código de negocio específico. Cada capa de la aplicación tiene un estricto grupo de responsabilidades y requerimientos. Esto crea separaciones más claras entre la lógica y la funcionalidad, y como esas capas deberían interactuar entre ellas.
Cada parte del hexágono representa un input – puerto, por ejemplo HTTP, que utiliza un adaptador para un tipo específico. Crea una separación clara entre el modelo domain y los dispositivos utilizados para las entradas o salidas.
1.Patrón Hexagonal – Modelo Domain
Un modelo domain es un modelo conceptual, una representación de conceptos significativos para el domain que han de ser modelados en el software. Los conceptos incluyen la información envuelta en el negocio y dirige los usos de negocio en relación a esa información.
2.Puertos en las arquitecturas hexagonales
Un puerto es un punto de entrada, proveniente del centro de la lógica. Define una serie de funciones. Un puerto es el mediante el que la lógica de negocio es accesible. Es una barrera de caso práctico, por ejemplo, puertos se corresponden a casos prácticos en una aplicación. La implementación más simple de un puerto puede tener forma de capa API. Los puertos son mayormente la mayoría de los API de la aplicación. Son llamados por los adaptadores primarios que forman la parte de usuario de la aplicación.
Ejemplos de ello son las funciones que permiten cambiar objetos, atributos y relaciones en el centro de la lógica.
Los puertos secundarios son las interfaces para los adaptadores secundarios. Son llamados desde el centro de la lógica.
Un ejemplo de puerto secundario es una interface para almacenar objetos individuales. Esta interface simplemente especifica que un objeto puede ser creado, actualizado, recuperado y borrado. No te da ninguna información sobre como este objeto esta almacenado.
3. Adaptadores en arquitectura de software hexagonal
Un adaptador es un puente entre la aplicación y el servicio necesitado en una aplicación. Se adapta a un puerto específico. Los adaptadores actúan de capa que sirve para transformar la comunicación entre actores externos y la lógica de la aplicación de forma que ambas dos quedan independientes. En una arquitectura hexagonal todas los actores primarios y secundarios interactúan con los puertos de la aplicación a través de los adaptadores. Los actores primarios son aquellos que utilizan el sistema para conseguir una meta en particular, mientras que los actores secundarios son aquellos que el sistema utiliza para conseguir la meta principal de los actores primarios.
En otras palabras, un adaptador primario es una pieza de código entre el usuario y el centro de la lógica. Un adaptador puede ser una función de la prueba unitaria para el centro de la lógica. Otra, puede ser la función de controlador que interactúa con la interface de usuario gráfico y el centro de la lógica.
Un adaptador secundario es una implementación de puerto secundario, una interface. Por ejemplo, puede ser una clase pequeña que convierte la petición de almacenamiento en la aplicación en una base de datos, y devuelve los resultados de la base de datos en forma de petición por el puerto secundario.
Vaughn Vernon continuo con la Hexagonal, o Puertos y adaptadores, estilo de arquitectura, la cual fue creada por Alistar Cockburn. Alistar cree que la arquitectura debería permitir a una aplicación ser igualmente conducida por los usuarios, programas, test automáticos o secuencias de comandos por lotes, y ser desarrolladas y testeadas de manera individual a sus dispositivos y base de datos.
Vaughn es famoso por su libro sobre DDD y ve la arquitectura hexagonal como una evolución del estilo de capas pero con ventajas. Permite retrasar decisiones para ciertos mecanismo de arquitectura, por ejemplo el tipo de persistencia a utilizar sin impedir el progreso de la funcionalidad en progreso. Lo importante aquí es que pensar en términos de puertos y adaptadores convierte a una manera más fácil el uso de los mismos API internos para diferente tipos de clientes.
Él ve que el foque principal de esta arquitectura es desacoplar el centro de la lógica de la aplicación de los servicios que utiliza. Permitiendo que diferentes servicios puedan “enchufarse”, y que la aplicación pueda funcionar sin estos servicios.
Arquitectura hexagonal y el mundo exterior
La aplicación puede esencialmente ser dirigida por cualquier número de controles distintos. Puedes utilizar tu centro de lógica de negocio interior a traves de un interface “Command Line”, otra aplicación o sistema, un humano o un guión automático.