Cuando una validación empieza a crecer y aparecen varios caminos distintos según el caso, suele ser buena idea separar el comportamiento.
Idea general
En lugar de acumular if y switch, cada estrategia encapsula una forma concreta de validar.
public interface IValidadorPedido
{
bool EsValido(Pedido pedido);
}
public class ValidadorImporteMinimo : IValidadorPedido
{
public bool EsValido(Pedido pedido) => pedido.Total > 0;
}
Cuándo tiene sentido
Tiene sentido cuando:
hay varias reglas intercambiables quieres probarlas por separado el comportamiento puede crecer con el tiempo