La Arquitectura Hexagonal, es un estilo de Arquitectura de Software que fue propuesto por Alistair Cockburn en 2005, con su propósito principal el de aislar la lógica de negocio de la infraestructura.
El diseño propuesto inicial solo contemplaba 2 capas, siendo el núcleo el dominio (reglas de negocio), y la capa externa la infraestructura.

Aunque hoy en día es más común ver Arquitecturas Hexagonales con 3 capas, añadiendo una capa extra entre infraestructura y dominio llamada: Aplicación.

La propuesta de esta Arquitectura es simple, tener el dominio separado de la infraestructura, y la manera como se comunica la infraestructura y el dominio es por medio de Adaptadores y Puertos.
Un puerto no es más que una interface de programación, un contrato que define que métodos existirán en la implementación, los puertos son de 2 tipos:
- Puertos de entrada (Puerto primario): son interfaces que definen las acciones de un caso de uso, por ejemplo: registrar usuario, login, crear venta.
- Puertos de salida (Puerto secundario): son interfaces que definen que es lo que el sistema necesita, es decir, que es lo que tus reglas de negocio van a necesitar del mundo exterior, de la infraestructura, por ejemplo: guardar en base de datos, enviar correo, enviar notificación push.
Los puertos serán los que hagan la comunicación entre la infraestructura y el dominio, de esta manera, nuestro dominio puede ser codificado sin necesidad de conocer cosas como frameworks, bases de datos, servicios externos. El dominio solo se centra en las acciones que necesita.
Los Adaptadores son la otra entidad existente en esta Arquitectura, los Adaptadores son de 2 tipos:
- Adaptador Primario: son clases que usan los Puertos de Entrada (Puertos Primarios), el Adaptador Primario sería, lo que ejecuta un usuario o actor de entrada, por ejemplo, un API, una aplicación de consola, un formulario. La implementación del Puerto primario se encuentra en la capa Dominio cuando se usan 2 capas, o en la capa Aplicación cuando se usan 3 capas.
- Adaptador Secundario: son clases que se encuentran en la infraestructura, clases que se encargan de implementar los Puertos de Salida (Puertos Secundarios), por ejemplo, son clases que se encarguen de: mensajes por smtp a correo, queries u ORM a base de datos, solicitudes HTTP a servicios externos.
En resumen, los adaptadores primarios usan los puertos de entrada, y los adaptadores secundarios implementan los puertos de salida.
De esta manera, la Arquitectura Hexagonal propone separar el dominio, permitiendo aislarlo para poder utilizar las reglas de negocio en distintas aplicaciones, haciendo cambios en infraestructura sin que afecten el dominio, la esencia del sistema.
También te permite hacer pruebas de las reglas de negocio, sin necesidad de involucrarte con la infraestructura.
Y, por último, te permite escalar el sistema de una manera limpia, ya que la mayoría de los cambios ocurren en la infraestructura, estos se pueden hacer sin necesidad de afectar el dominio.
La Arquitectura Hexagonal, es un estilo de Arquitectura muy utilizado hoy en día, y si quieres aprender más sobre esto, puedes tomar mi curso de Arquitectura Hexagonal, el cual tiene ejemplos con código que incluyen ejemplos realistas: Ir al Curso de Arquitectura Hexagonal.
También te dejo un video donde explico la Arquitectura Hexagonal paso a paso:
Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/