La Capa de Aplicación: Orquestando el Movimiento
▸ arquitectura-hexagonal/aplicacionYa hablamos del dominio como el corazón de un sistema: el lugar donde viven las reglas puras del negocio.
Pero ese corazón no late solo. Alguien tiene que decirle cuándo activarse, con qué datos, y para qué. Ese alguien es la capa de aplicación.
¿Qué es realmente la capa de aplicación?
Es la encargada de coordinar el uso del dominio para cumplir con una intención concreta.
No define reglas, no guarda datos, no hace networking.
Lo que hace es recibir una intención (desde afuera del sistema), y ejecutar los pasos necesarios para que esa intención se cumpla correctamente.
Es como el árbitro en un partido: no juega, no anota goles, no diseña la cancha. Pero se asegura de que las reglas se usen en el momento adecuado.
No son archivos, son responsabilidades
Es muy común caer en esta trampa:
“¿Dónde va la capa de aplicación? ¿En qué carpeta? ¿Qué tipo de archivo es?”
Pero la verdad es que una capa no se define por su estructura física, sino por su rol en el sistema.
Un mismo archivo puede contener partes que pertenecen al dominio y otras que pertenecen a la aplicación (aunque no sea lo ideal).
Y un sistema bien organizado puede tener decenas de archivos dispersos que, juntos, componen la capa de aplicación.
Entonces… ¿Cómo la reconozco?
La lógica de aplicación:
- Llama al dominio, pero no contiene las reglas.
- Coordina el flujo, pero no sabe de detalles técnicos.
- Organiza casos de uso completos, como “registrar usuario”, “completar partida”, “mover ficha”.
La aplicación es el director de orquesta
Si pensás en tu sistema como una orquesta:
- El dominio son los instrumentos (cada uno con su lógica, su sonido, sus reglas).
- La infraestructura es el escenario, los micrófonos, el sistema de sonido.
- La aplicación es el director: el que decide cuándo entra cada instrumento, en qué orden, y con qué intensidad.
Sin director, cada músico haría lo que quiere.
Con un director bien entrenado, el conjunto suena armónico.
¿Qué vive en la capa de aplicación?
Acá van los elementos más comunes que encontrarás en esta capa:
● Casos de uso
También llamados use cases, representan intenciones completas que un usuario o sistema quiere ejecutar.
Por ejemplo:
- “Iniciar partida de ajedrez”
- “Finalizar partida y guardar resultado”
- “Reiniciar el tablero”
Cada caso de uso tiene una secuencia clara: validaciones, llamados al dominio, acciones esperadas.
No decide cómo se hace cada cosa (eso lo define el dominio o la infraestructura), sino qué se hace y en qué orden.
● Coordinadores
Son funciones, métodos o clases que conectan varias partes del sistema, manteniéndolas desacopladas.
Por ejemplo:
- Llaman al dominio para ejecutar una regla.
- Luego usan un repositorio (definido por una interfaz) para guardar los cambios.
- Después notifican a otro sistema externo, si hace falta.
Pero nunca hacen el trabajo directamente.
Solo orquestan las piezas, como quien mueve marionetas detrás del telón.
¿Qué no debería haber?
Para mantener la capa de aplicación limpia y útil a largo plazo, es importante evitar ciertos elementos:
- ❌ Detalles técnicos (como Express, SQL, JWT, APIs, sockets, etc.)
- ❌ Reglas del negocio (eso pertenece al dominio)
- ❌ Validaciones de bajo nivel (como “este campo es un string”, “el email tiene @”, etc.)
Todo eso debería vivir en otras capas: infraestructura o validaciones de entrada.
Ejemplo con el juego de ajedrez
Volvamos a nuestro ejemplo:
Queremos permitir que un jugador mueva una ficha.
La capa de aplicación no se pregunta si el caballo se mueve en “L”.
Tampoco guarda el tablero en una base de datos, ni sabe si el juego es online o físico.
Lo que hace es:
- Recibir la intención (“mover ficha”).
- Validar que la partida esté activa.
- Consultar al dominio si el movimiento es válido.
- Ejecutar el movimiento (con el dominio).
- Notificar el cambio a la infraestructura (por ejemplo, guardar en DB o avisar por WebSocket).
Nada de eso requiere conocer la tecnología usada ni las reglas del ajedrez: solo cómo coordinar una acción.
¿Por qué es tan importante esta capa?
Porque sin ella, todo termina mezclado.
Los controladores llaman al dominio directamente. Las reglas se llenan de detalles técnicos. Y el sistema se vuelve imposible de testear o modificar sin romper cosas.
La capa de aplicación es ese espacio intermedio que evita el caos.
Además:
- Permite testear flujos completos sin levantar una API.
- Hace que los cambios de tecnología no afecten al negocio.
- Facilita la evolución del sistema sin miedo.
En resumen
La capa de aplicación:
✅ Se encarga de activar las reglas del dominio
✅ No contiene detalles técnicos
✅ Coordina acciones completas
✅ Permite que el sistema sea flexible, testeable y entendible
No importa si tenés una carpeta llamada “application” o no.
Lo que importa es que exista un espacio en tu sistema que cumpla esta función.