Validações funcionais C #

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.