Definición: Patron de arquitectura que aisla la logica de negocio del mundo exterior mediante puertos y adaptadores, facilitando la testeabilidad y el cambio de tecnologias.
— Fuente: NERVICO, Consultoría de Desarrollo de Producto
Que es la arquitectura hexagonal
La arquitectura hexagonal, tambien conocida como patron de puertos y adaptadores, es un estilo arquitectonico propuesto por Alistair Cockburn. Su principio fundamental es que la logica de negocio (el nucleo de la aplicacion) no debe depender de ningun detalle externo: ni de la base de datos, ni del framework web, ni de servicios de terceros. La comunicacion entre el nucleo y el mundo exterior se realiza exclusivamente a traves de puertos (interfaces) y adaptadores (implementaciones concretas).
Como funciona
El nucleo de la aplicacion define puertos de entrada (casos de uso que la aplicacion expone) y puertos de salida (interfaces que la aplicacion necesita para funcionar). Los adaptadores conectan estos puertos con tecnologias concretas. Un adaptador de entrada puede ser un controlador REST o un handler de mensajes. Un adaptador de salida puede ser un repositorio de PostgreSQL o un cliente HTTP. El nucleo nunca importa ni referencia directamente a estas implementaciones.
Por que importa
Cuando la logica de negocio esta desacoplada de la infraestructura, cambiar de base de datos, de framework o de proveedor de servicios no requiere modificar las reglas de negocio. Los tests unitarios se ejecutan sin necesidad de infraestructura real, porque los puertos de salida se sustituyen por mocks. Este desacoplamiento reduce el coste de mantenimiento a largo plazo y facilita la evolucion del sistema.
Ejemplo practico
Un servicio de facturacion tiene su logica de negocio en el nucleo: calcular impuestos, aplicar descuentos, generar facturas. El puerto de salida “RepositorioFacturas” define que operaciones necesita. Inicialmente, el adaptador implementa ese puerto con MongoDB. Cuando el equipo decide migrar a PostgreSQL, solo reemplaza el adaptador. La logica de negocio, que representa el 70% del codigo, no cambia ni una linea.