1.7 KiB
1.7 KiB
ADR-004: Estrategia de Validación en 3 Capas
Estado: Aceptado Fecha: 2026-01-07
Contexto
Las reglas de negocio críticas son:
- Máximo 3 materias por estudiante (9 créditos)
- No repetir profesor en inscripciones
- Datos de entrada válidos (email, nombre)
Decisión
Validar en 3 capas con responsabilidades distintas:
| Capa | Responsabilidad | Tecnología |
|---|---|---|
| Frontend | UX, feedback rápido | Reactive Forms |
| Application | Estructura de datos, sanitización | FluentValidation |
| Domain | Reglas de negocio puras | Domain Services |
Implementación
Frontend (UX)
this.form = this.fb.group({
name: ['', [Validators.required, Validators.minLength(3)]],
email: ['', [Validators.required, Validators.email]],
});
Application (Sanitización + XSS)
RuleFor(x => x.Name)
.NotEmpty()
.Must(NotContainDangerousContent); // Previene XSS
Domain (Negocio)
public void ValidateEnrollment(Student student, Subject subject)
{
if (student.Enrollments.Count >= 3)
throw new MaxEnrollmentsExceededException();
if (student.HasProfessor(subject.ProfessorId))
throw new SameProfessorConstraintException();
}
Consecuencias
Positivas
- Defensa en profundidad
- Separación de responsabilidades
- UX mejorada (errores rápidos)
- Seguridad garantizada (backend siempre valida)
Negativas
- Duplicación parcial de reglas
- Mantener sincronizadas las validaciones
Regla de Oro
Nunca confíes en el frontend. El backend SIEMPRE debe validar.