Quando estamos validando nosso modelo, tendemos a escrever validações como esta:
public bool IsValid(Product product){
if(string.IsNullOrEmpty(product.Name))
return false;
if(product.Price<=0)
return false;
if(product.Category==null)
return false;
}
Isso pode parecer bom no início, mas se tivermos um modelo complexo e precisarmos adicionar muitas regras, isso pode ficar confuso.
Uma abordagem melhor é o uso de delegados e expressões lambda, para criar um conjunto de regras, e então ver se nosso produto pode cumprir todas elas, vamos ver como podemos fazer isso.
public bool IsValid (Product product){
Func<Product,bool> rules = {
p => string.IsNullOrEmpty(p.Name),
p => p.Price <= 0,
p => p.Category == null
}
return rules.All( rule => !rule(product) );
}
Nesse caso, definimos as mesmas 3 regras e só retornamos true se nenhuma das regras for verdadeira.
Com essa abordagem, você pode fazer validações complexas e ter um código mais limpo enquanto faz isso.