A03 — Strategy + Polymorphism
Encapsula comportamientos a través de objetos strategy polimórficos
Patrón: Strategy Pattern + Polimorfismo
Filosofía: Encapsula comportamientos variables. Cada tipo de strategy implementa sus propias reglas de precio.
Descripción
A03 utiliza el patrón Strategy para encapsular diferentes comportamientos de precio. Cada tipo de reserva (Hotel, Evento, etc.) tiene su propia clase Strategy implementando lógica de precio. Esto hace el modelo de dominio más expresivo y alinea la estructura del código con conceptos de negocio.
Fortalezas:
- Claro mapeo entre tipos de negocio y código
- Fácil de testear estrategias individuales de forma aislada
- Nuevos tipos de reserva requieren nuevas clases strategy, no modificaciones
- Buen equilibrio entre estructura y complejidad
- Controladores y servicios permanecen delgados (30-32 líneas)
Debilidades:
- Más archivos (14) que enfoques más simples
- Phase04PricingStrategy duplica lógica de BasicPricingStrategy
- Crear una nueva fase crea una nueva strategy duplicando lógica previa
- Necesita mejor refactorización para manejar comportamiento compartido entre strategies
- Aún requiere entender la jerarquía de strategies
Evolución a través de Fases
| Fase | Archivos | Líneas de Código | Controlador (líneas) |
|---|---|---|---|
| Fase 01 | 14 | 371 | 31 |
| Fase 02 | 14 | 523 | 32 |
| Fase 03 | 14 | 727 | 32 |
| Fase 04 | 14 | 775 | 32 |
Duplicación de Strategies: Phase04PricingStrategy duplica lógica de BasicPricingStrategy para añadir 3 nuevos métodos. Muestra que el patrón funciona pero necesita refactorización para evolución basada en fases.
Métricas Clave
Total de Archivos
14
Estable entre fases
Total de Líneas de Código
775
+109% crecimiento P01→P04
Tamaño del Controlador (Fase 04)
32 líneas
+1 línea desde Fase 01
Puntuación de Testeabilidad
Buena
Las strategies son unidades testeables
Conclusión
Buen equilibrio con espacio para refinamiento.
A03 alcanza un sólido punto medio. Los controladores se mantienen delgados, las strategies son cohesivas y testeables, y el modelo de dominio expresa claramente la intención de negocio. Sin embargo, muestra el riesgo de duplicación de strategies: añadir una nueva fase requiere copiar la lógica de la strategy previa y extenderla.
Con mejor refactorización (composición sobre herencia, métodos trait compartidos), este patrón escala mucho mejor. Es una excelente elección cuando tienes tipos de producto distintos con comportamientos variables.
✓ Cuándo usar A03
- Tipos de producto o contextos tienen diferentes reglas de cálculo
- Los dominios de negocio se mapean naturalmente a diferentes strategies
- Quieres buena testeabilidad con clara encapsulación de comportamiento
- Los equipos se benefician de ver el mapeo strategy-a-negocio