Estoy pensando en utilizar el patrón de especificación para fines de validación. Lo difícil es cómo decirle al usuario por qué algunas especificaciones no se cumplieron. ¿Qué pasa si el Specification.IsSatisfiedBy()
no solo devolverá un valor bool
, sino también el motivo de la falla. Se vería algo como esto:DDD Uso del patrón de especificación para la validación
interface ISpecification<T>
{
CheckResult IsSatisfiedBy(T candidate);
}
donde CheckResult
es:
class CheckResult
{
public bool IsSatisfied { get; }
public string FailureReason { get; }
}
En Fowler & Evans trabajo hay un concepto de Especificación parcialmente satisfechas cuyo propósito es proporcionar una explicación lo que exactamente no estaba satisfecho. Sin embargo, en ese documento, se implementa como método adicional remainderUnsatisfiedBy que devuelve la especificación que no se logró con el Candidate.
Por lo tanto, la pregunta es: ¿Cuándo se utiliza la especificación para fines de validación, cómo informar al usuario que una determinada especificación no se cumplió? ¿La solución que acabo de presentar es buena?
Antes que nada, ¿está seguro de que la especificación es el camino a seguir? Quiero decir, ¿cada especificación conoce el contexto donde un modelo podría ser o no válido? No puedo decir mucho porque no sé cómo es el dominio. Para una validación simple, creo que está bien, pero eso es lo que están haciendo los atributos de validación de DataAnnotación en este momento. – MikeSW