Capas y reglas de dependencia
La arquitectura limpia separa el sistema por responsabilidad. Cada capa tiene un motivo distinto para cambiar y una relacion clara con las demas.
Capas habituales
src/
domain/
application/
infrastructure/
presentation/Domain
Contiene reglas de negocio puras:
- Entidades.
- Value objects.
- Reglas invariantes.
- Errores del dominio.
- Servicios de dominio cuando una regla no pertenece a una sola entidad.
No debe importar frameworks, ORM, HTTP, colas, logs ni librerias de UI.
Application
Contiene casos de uso. Coordina una intencion del sistema:
- Crear un pedido.
- Publicar un articulo.
- Registrar un usuario.
- Calcular una factura.
- Procesar un pago.
Puede depender del dominio y de puertos abstractos, pero no de adaptadores concretos.
Infrastructure
Contiene detalles tecnicos:
- Repositorios SQL.
- Clientes HTTP.
- Productores Kafka.
- Lectores de archivos.
- Servicios de email.
- Adaptadores de cache.
Esta capa cambia cuando cambia la tecnologia.
Presentation
Es la entrada al sistema:
- Controladores REST.
- GraphQL resolvers.
- CLI commands.
- Jobs programados.
- Consumers de eventos.
Su trabajo es traducir entrada externa a comandos internos y devolver respuestas entendibles.
Regla de dependencia
presentation -> application -> domain
infrastructure -> application -> domainEl dominio no apunta a nadie. La aplicacion no debe conocer controladores, ORM ni frameworks web. La infraestructura implementa contratos definidos por la aplicacion o por el dominio.
Ejemplo practico
POST /orders
-> OrderController
-> CreateOrderUseCase
-> OrderRepository
-> SqlOrderRepositoryEl caso de uso sabe que necesita guardar un pedido. No sabe si el guardado ocurre en PostgreSQL, MongoDB, un archivo o un mock de test.
Senales de mala dependencia
- Una entidad importa un modelo de ORM.
- Un caso de uso recibe un objeto Request de Express, Django, Laravel o Spring.
- Una regla de negocio lee variables de entorno directamente.
- Un test de dominio necesita arrancar Docker.
- Cambiar de proveedor de email obliga a tocar controladores y entidades.
Checklist
- Las dependencias del dominio son cero o casi cero.
- Los casos de uso reciben datos simples o DTOs propios.
- Los adaptadores se pueden sustituir sin tocar reglas de negocio.
- Las interfaces estan cerca del caso de uso que las necesita.
- La infraestructura se configura en el borde de la aplicacion.
