Apariencia
Validación de entidades
EntityValidator<TEntity> evalúa reglas y devuelve Result<TEntity>. Si todas pasan, conserva la entidad original; si alguna falla, devuelve un árbol de errores.
Un validador completo
Requiere el módulo Validators.
csharp
using Greencore.Platform.Errors;
using Greencore.Platform.Validators;
var validador = EntityValidator.For<Cliente>()
.WithRule(cliente => cliente.Nombre != cliente.Correo,
"El nombre y el correo deben ser diferentes.")
.WithMember(cliente => cliente.Nombre,
reglas => reglas.Required("El nombre es obligatorio."))
.WithMember(cliente => cliente.Correo, reglas => reglas
.Required("El correo es obligatorio.")
.Must(correo => correo.Contains('@'), "El correo debe contener @."))
.WithMember(cliente => cliente.Edad,
reglas => reglas.Must(edad => edad >= 18, "Debe ser mayor de edad."));
var resultado = validador.Validate(new Cliente("Ana", "[email protected]", 17));
foreach (var error in resultado.ErrorsOfType<Error>())
Console.WriteLine(error.Text);
record Cliente(string Nombre, string Correo, int Edad);Salida esperada: Debe ser mayor de edad.. La comprobación de correo es deliberadamente sencilla; solo exige el carácter @.
Contrato de las reglas
WithRuleevalúa la entidad completa.WithMemberselecciona un miembro mediante una expresión.Mustconsidera válido un valor cuando el predicado devuelvetrue.Requiredrechazanully cadenas vacías o compuestas por espacios.- Cero,
falsey colecciones vacías son valores presentes paraRequired. Añade una regla específica si necesitas rechazarlos.
Cuando falla Required, no se ejecutan los demás predicados de ese miembro, independientemente del orden de registro. Sin Required, tus predicados pueden recibir valores nulos.
Reutilización y aislamiento
La configuración fluida es inmutable: cada WithRule o WithMember devuelve un nuevo validador. Conserva el valor retornado. Las ejecuciones generan árboles de error independientes y acumulan fallos de los distintos grupos.
Una entidad nula provoca ArgumentNullException. Las excepciones de tus predicados se propagan; no se convierten automáticamente en errores de validación.