Strategy Pattern: cuando el if/else empieza a dirigir el negocio
Cómo usar Strategy para aislar reglas que cambian, reducir condicionales críticos y convertir decisiones de negocio en políticas explícitas.
- #gof
- #strategy
- #arquitectura
- #reglas-negocio
Resumen ejecutivo
- Strategy ayuda cuando una regla variable empieza a dirigir el negocio desde condicionales dispersos.
- La mejora no es estética: hace explícita una política de negocio testeable y reemplazable.
El problema real
El primer if no molesta. El décimo sí. Cuando pricing, permisos, scoring o validaciones cambian por segmento, el flujo principal empieza a acumular decisiones que nadie quiere tocar.
La señal de alerta es simple: para cambiar una regla de negocio hay que leer demasiado código que no representa esa regla.
Qué resuelve Strategy
Strategy define una interfaz común para varias políticas y permite elegir una en tiempo de ejecución. La decisión queda visible: qué política se usa y por qué.
No elimina la complejidad de negocio. La ubica en objetos chicos, testeables y reemplazables.
Cómo se ve en código
El checkout no necesita saber todos los casos. Solo necesita recibir una política con el contrato correcto.
type DiscountStrategy = {
apply(total: number): number;
};
class Checkout {
constructor(private readonly discount: DiscountStrategy) {}
totalAfterDiscount(total: number) {
return this.discount.apply(total);
}
}
const noDiscount: DiscountStrategy = { apply: (total) => total };
const launchDiscount: DiscountStrategy = { apply: (total) => total * 0.9 };Cuándo usarlo
Strategy tiene sentido cuando la variabilidad ya es real:
- Reglas de pricing o descuentos cambian por segmento.
- Hay validaciones alternativas para distintos canales.
- Un cálculo tiene múltiples algoritmos intercambiables.
- Necesitás testear reglas sin levantar todo el flujo principal.
Cuándo evitarlo
Si solo hay dos ramas estables y no hay evidencia de cambio, un condicional claro puede ser mejor. Strategy agrega nombres, archivos y composición; ese costo debe comprar flexibilidad real.
Evidencia relacionada
FAQ
- ¿Strategy reemplaza todos los if?
- No. Reemplaza condicionales donde la variación representa una política o algoritmo con vida propia. Un if simple y estable puede ser la mejor opción.
- ¿Cuál es la diferencia entre Strategy y State?
- Strategy cambia el algoritmo elegido. State cambia el comportamiento porque el objeto está en otro estado interno.