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