Fecha de publicación: 10 de abr 2026
¿Qué es una arquitectura hexagonal y por qué debería importarte?
Autor: Carlos Ramírez - Developer
Tecnología/Desarrollo
Arquitectura Hexagonal: Qué es y por qué debería importarte
La arquitectura hexagonal, también conocida como Ports and Adapters, es un estilo arquitectónico propuesto por Alistair Cockburn que busca desacoplar completamente la lógica de negocio del mundo exterior (bases de datos, APIs, frameworks, UI, etc.). Su objetivo principal es que el núcleo de la aplicación sea independiente de cualquier tecnología.
¿Qué es la arquitectura hexagonal?
La arquitectura hexagonal organiza el sistema en tres componentes principales:
- Dominio (Core): Contiene la lógica de negocio pura.
- Puertos (Ports): Interfaces que definen cómo el dominio interactúa con el exterior.
- Adaptadores (Adapters): Implementaciones concretas de los puertos para interactuar con tecnologías externas.
Esto permite que el sistema pueda cambiar su infraestructura sin afectar la lógica de negocio.
Estructura conceptual
| Componente | Responsabilidad | Ejemplo |
|---|---|---|
| Dominio | Reglas de negocio | Cálculo de precios |
| Puerto de entrada | Casos de uso | Crear orden |
| Puerto de salida | Interfaces externas | Repositorio |
| Adaptador de entrada | Controladores | REST Controller |
| Adaptador de salida | Infraestructura | Base de datos |
—
Ejemplo básico en código
Dominio
export class Order {
constructor(public total: number) {}
applyDiscount(discount: number) {
this.total = this.total - discount;
}
}
Puerto de salida
export interface OrderRepository {
save(order: Order): Promise<void>;
}
Caso de uso (Puerto de entrada)
typescript export class CreateOrder { constructor(private repository: OrderRepository) {}
async execute(total: number) { const order = new Order(total); order.applyDiscount(10); await this.repository.save(order); } }
Adaptador de salida (Infraestructura)
export class MongoOrderRepository implements OrderRepository {
async save(order: Order): Promise<void> {
console.log("Saving order in MongoDB", order);
}
}
Adaptador de entrada (Controller)
const repo = new MongoOrderRepository();
const useCase = new CreateOrder(repo);
useCase.execute(100);
¿Por qué debería importarte?
1. Independencia tecnológica
Puedes cambiar de base de datos o framework sin afectar la lógica del negocio.
2. Testabilidad
Permite probar el dominio sin depender de infraestructura.
class MockRepo implements OrderRepository {
async save(order: Order): Promise<void> {
// mock implementation
}
}
3. Mantenibilidad
El código es más fácil de entender y modificar debido a su separación clara.
4. Escalabilidad organizacional
Facilita que equipos trabajen en paralelo (dominio vs infraestructura).
—
Comparación con otras arquitecturas
| Característica | Monolítica tradicional | Hexagonal |
|---|---|---|
| Acoplamiento | Alto | Bajo |
| Testabilidad | Difícil | Alta |
| Flexibilidad | Baja | Alta |
| Evolución | Costosa | Controlada |
—
Cuándo usar arquitectura hexagonal
Usa este enfoque cuando:
- El dominio es complejo
- Se espera que el sistema evolucione
- Necesitas alta testabilidad
- Hay múltiples integraciones externas
Evítalo cuando:
- El proyecto es muy pequeño
- Es un prototipo rápido
—
Errores comunes
- Sobreingeniería en proyectos simples
- No respetar la inversión de dependencias
- Mezclar lógica de infraestructura en el dominio
—
Conclusión
La arquitectura hexagonal no es solo una forma de organizar código, sino una estrategia para proteger el corazón de tu aplicación: la lógica de negocio. Adoptarla significa diseñar sistemas más robustos, mantenibles y preparados para el cambio.
—