Una de las técnicas más conocidas para añadir reglas/validaciones a los modelos cuando trabajamos con ASP.NET MVC es utilizar Data Annotations, no obstante, otra posible opción es utilizar la interfaz IValidatableObject, así entonces nuestro modelo debe implementar dicha interfaz y en el método Validate añadir las validaciones necesarias.

Por ejemplo, partamos de un sencillo modelo:


public class Customer
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Email { get; set; }

    public int Age { get; set; }
}

Ahora se debe implementar la interfaz IValidatableObject:


public class Customer : IValidatableObject
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Email { get; set; }

    public int Age { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        throw new NotImplementedException();
    }
}

Y en el método Validate vamos a definir las reglas/validaciones que requiera nuestro modelo:


public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    var errors = new List<ValidationResult>();
    if (string.IsNullOrEmpty(Name))
    {
        errors.Add(new ValidationResult("El nombre es requerido"));
    }

    if (string.IsNullOrEmpty(Email))
    {
        errors.Add(new ValidationResult("El email es requerido"));
    }

    if (Age < 18)
    {
        errors.Add(new ValidationResult("Debe tener más de 18 años para poder registrarse"));
    }

    return errors;
}

Y luego al probar efectivamente las reglas se aplican correctamente:

IValidatableObject

Espero les sea de interés y no te olvides compartir!