Apariencia
Migración y superficie pública
Cambios observables
Las incorporaciones de uso cotidiano son aditivas: FieldSequence equivale a Field con Sequence; las sobrecargas sin mensaje usan textos españoles; result.GetDiagnostics() y result.ForField(...) permiten consultar también resultados satisfactorios; error.ToResult() conserva el error existente. Consulta uso cotidiano para las firmas y ejemplos.
| Situación | Comportamiento actual | Migración |
|---|---|---|
Validate con reglas asíncronas en el conjunto seleccionado | Lanza InvalidOperationException | Usar ValidateAsync |
Reglas mixtas en ValidateAsync | Orden de registro | Declarar dependencias con un plan; revisar dependencias accidentales del orden anterior |
| Conjunto nombrado inexistente o vacío | Lanza ArgumentException | Corregir el nombre; null selecciona el conjunto predeterminado |
| Consultar todas las reglas | Registrations incluye síncronas, asíncronas y conjuntos | Mantener Rules solo para inspección síncrona |
| Cancelación durante la última regla | Se detecta antes de devolver resultado | Gestionar cancelación como interrupción |
Aritmética con default(Money) | Error de moneda requerida | Construir mediante Money.Create |
Edad de default(BirthDate) | Excepción de valor sin inicializar | Comprobar IsInitialized |
Plan local asíncrono en WithRules | Se adapta automáticamente | Ejecutar ValidateAsync; invariantes siguen siendo síncronas |
Segundo ModelValidator.WithRules | Añade otro plan independiente | Usar Sequence para dependencias |
| Política de objeto de valor | DomainValidationRule.FromFactory | Validar con la fábrica; construir explícitamente el valor normalizado |
| Opciones de recorrido | Sobrecargas con RuleEvaluationOptions | Usar argumentos nombrados si se combina con conjunto o token |
| Mensajes por campo | error.ForField(path, DiagnosticView) | Importar Greencore.Domain.Entity.Validators.Diagnostics |
Los conjuntos nombrados seleccionan exclusivamente sus reglas; no incluyen automáticamente el conjunto predeterminado. Un conjunto sin registros no queda registrado por llamar a un callback vacío.
Composición y mutabilidad
EntityValidator y BusinessValidator conservan configuración inmutable: sus métodos With... devuelven otra instancia y debe conservarse el retorno. ValidationBuilder e InvariantBuilder son builders mutables. Las entradas por callback permiten configurar sin reasignaciones dentro del builder.
WithProperty(... Required(...)) conserva su protección de las reglas restantes de la propiedad. En el builder común, expresa esa protección mediante Sequence(s => s.Required(...).Email(...)). Registrar presencia y formato como ramas independientes no crea una dependencia.
Los prerrequisitos de BusinessValidator se ejecutan globalmente antes de las reglas ordinarias. Una secuencia de plataforma protege únicamente su composición. Conserva esta distinción al migrar una política de negocio.
Contratos cotidianos y avanzados
| Grupo | Contratos | Decisión |
|---|---|---|
| Cotidiano | Fábricas de valores, EntityValidator, ModelValidator<T, C>, BusinessValidator, Invariants | Entradas recomendadas |
| Composición | ValidationBuilder, ValidationPlan | Reutilización común |
| Extensión | IInvariant, IEntityValidationRule, IAsyncEntityValidationRule, especificaciones y razones tipadas | Mantener para integraciones |
| Inspección | Registrations, GetDomainDiagnostics | Inventario completo y lectura común |
| Caminos conservados | WithProperty, ModelValidator<TEntity>, TreeModelValidation, construcción explícita de árboles | Mantener sin cambiar semántica incidental |
No se añade otra familia de errores. GetDomainDiagnostics conserva la lectura de hojas; ForField incorpora selección de campo y vistas. La selección se hace por la responsabilidad de la operación, no por el número de tipos disponibles.