¿Qué cambio sigue mejor el Open/Closed Principle?
def price(order):
if order.type == "regular": return order.total
if order.type == "vip": return order.total * 0.9
# every new customer type edits this functionOpciones
- Añadir otra rama
ifcada vez que aparece un tipo nuevo - Crear una interface
PricingStrategyy añadir una clase por cada tipo nuevo (Opción correcta) - Mover la función a un módulo de utilidades aparte
- Mantener un diccionario global de descuentos y editarlo en ejecución
Respuesta
Crear una interface PricingStrategy y añadir clases nuevas para los tipos nuevos
Por qué
Open/Closed significa: abierto a extensión, cerrado a modificación. Debes añadir comportamiento AÑADIENDO código, no editando código que ya funciona y está probado.
Con un if/elif que crece, cada tipo de cliente nuevo implica editar (y poner en riesgo) esta función.
Con una interface strategy, cada tipo es su propia clase pequeña; un tipo nuevo es una clase nueva y el código antiguo no se toca.
Recuerda
Añade comportamiento con código nuevo, no editando código que funciona.