Layered (N-Tier)
Organiza la aplicación en capas con dependencias unidireccionales: Presentación → Aplicación → Dominio → Infraestructura.
Contexto
La organización por defecto de la mayoría de apps de negocio. Cada capa tiene una responsabilidad clara.
Problema
Sin reglas, todo termina en el controller o en un God Service.
Solución
Capas con dependencias solo hacia abajo:
Presentación → Aplicación → Dominio → Infraestructura
En Clean Architecture la dirección se invierte: Infraestructura depende del Dominio (Dependency Inversion).
#Ejemplo en C# — proyectos
CSHARP
Solution/
├── MyApp.Web ← Controllers / Razor / Minimal API
├── MyApp.Application ← Casos de uso (Commands, Queries)
├── MyApp.Domain ← Entidades, value objects, reglas
└── MyApp.Infrastructure ← EF Core, HTTP clients, repositorios
// Domain
public class Order { public Guid Id { get; } public void Confirm() { /* invariantes */ } }
// Application
public record ConfirmOrderCommand(Guid Id);
public class ConfirmOrderHandler { /* orquesta dominio + repositorio */ }
// Infrastructure
public class EfOrderRepository : IOrderRepository { /* persistencia */ }
// Web
[ApiController] public class OrdersController : ControllerBase { /* delega en Application */ }Cuándo NO aplicarlo
- Para microservicios pequeños: una capa puede sobrar.
- Cuando el equipo abusa del "anemic domain": las capas se vuelven CRUD plano.
#architecture #layered