Saltar al contenido principal

Introducción a Vali-Validation

¿Qué es Vali-Validation?

Vali-Validation es una biblioteca de validación fluent para .NET, diseñada para ser ligera, expresiva y sin dependencias externas innecesarias. Permite definir reglas de validación de forma declarativa mediante una API fluent, separando la lógica de validación del modelo de dominio y de los controladores.

La biblioteca sigue el mismo patrón conceptual que FluentValidation, pero está construida desde cero con un enfoque en:

  • Cero dependencias externas en el paquete core (solo Microsoft.Extensions.DependencyInjection.Abstractions)
  • Soporte nativo de async/await sin los problemas de deadlock presentes en otras bibliotecas
  • Integración de primera clase con el ecosistema Vali (Vali-Mediator)
  • API moderna aprovechando las características de C# 11 y .NET 7+

¿Por qué existe?

FluentValidation es excelente, pero en proyectos que usan Vali-Mediator o que buscan minimizar dependencias transitivas, Vali-Validation ofrece:

  1. Integración nativa con Result<T> — En lugar de lanzar excepciones al usar Vali-Mediator, el behavior devuelve Result<T>.Fail(...) directamente, sin try/catch en los handlers.
  2. Sin dependencias de terceros en el core — No se arrastra NuGet packages que podrían tener conflictos de versión.
  3. ValidateParallelAsync — Ejecuta reglas asíncronas en paralelo de forma nativa, sin configuración adicional.
  4. API de colecciones ricaRuleForEach, Unique(), AllSatisfy(), AnySatisfy(), In(), NotIn() incluidos de serie.

Comparación con FluentValidation

CaracterísticaVali-ValidationFluentValidation
Dependencias externas (core)Solo DI AbstractionsNinguna
Soporte async nativoSí, con CTSí, con CT
Validación en paraleloValidateParallelAsyncNo nativo
Integración MediatorValiMediator (Result<T>)MediatR (excepción)
Transform<TNew>()Sí (Transform)
Custom() con contextoSí (CustomContext<T>)Sí (ValidationContext<T>)
SetValidator anidado
RuleForEach
Include (herencia)
When / Unless asyncWhenAsync / UnlessAsyncNo nativo
Reglas de passwordHasUppercase, HasDigit, etc.Extensiones separadas
Tarjetas de crédito (Luhn)CreditCard()
LicenciaMITApache 2.0
Targetsnet7/8/9netstandard2.0+

Ecosistema de paquetes

Vali-Validation está dividido en paquetes separados para que solo instales lo que necesitas:

Vali-Validation (core)

El paquete principal. Contiene:

  • AbstractValidator<T> — clase base para todos los validadores
  • IValidator<T> — interfaz para inyección de dependencias
  • IRuleBuilder<T, TProperty> — interfaz fluent con todas las reglas
  • ValidationResult — resultado con errores y códigos
  • ValidationException — excepción tipada
  • DI registration (AddValidationsFromAssembly)
<PackageReference Include="Vali-Validation" Version="*" />

Vali-Validation.MediatR

Integración con MediatR. Registra un IPipelineBehavior<TRequest, TResponse> que valida automáticamente el request antes de llegar al handler. Si la validación falla, lanza ValidationException.

Vali-Validation.ValiMediator

Integración con Vali-Mediator. Similar al anterior, pero cuando TResponse es Result<T>, devuelve Result<T>.Fail(errors, ErrorType.Validation) en lugar de lanzar una excepción.

Vali-Validation.AspNetCore

Integración con ASP.NET Core. Incluye middleware, ValiValidationFilter<T> para Minimal API, y ValiValidateAttribute para controladores MVC.

Siguientes pasos