class ReservationService {

  public function calculateTotal()
  {
      return $this->pricingService
          ->applySeasonModifier()
          ->applyDiscountRules()
          ->applyChannelCommission()
          ->applyTaxes()
          ->buildInvoice();
  }

}

// Domain rules evolve
// architecture decisions matter
// complexity grows over time

Volver a la Comparación

A04 — Decorator Domain

Compón comportamientos dinámicamente a través de decorators sin modificación

Patrón: Builder + Decorator Pattern

Filosofía: Principio Abierto/Cerrado. Añade comportamiento a través de composición, nunca modificación.

Descripción

A04 aplica el patrón Decorator con un Builder para componer reglas de precio dinámicamente. Cada regla de precio (descuento, impuesto, recargo) es un decorator separado que envuelve al anterior. Nuevas reglas requieren nuevos archivos decorator, no modificación de código existente.

Fortalezas:

  • Principio Abierto/Cerrado: extiende a través de composición, no modificación
  • Cada decorator es una responsabilidad única: aplica una regla
  • Lógica de dominio pura, altamente testeable sin base de datos
  • Escala horizontalmente: nuevas reglas = nuevos archivos, código existente intacto
  • La Fase 05 apenas requeriría cambios al código existente
  • Reglas encadenables permiten escenarios de precio complejos

Debilidades:

  • Mayor coste inicial (22 archivos, 1139 líneas en Fase 04)
  • Curva de aprendizaje pronunciada para el concepto de composición de decorators
  • Debugging puede ser complejo: los decorators están envueltos unos dentro de otros
  • La configuración del Builder debe ser precisa para obtener el orden correcto de reglas
  • Over-engineering para dominios simples y estables

Evolución a través de Fases

Fase Archivos Líneas de Código Controlador (líneas)
Fase 01 13 423 32
Fase 02 16 671 32
Fase 03 19 878 32
Fase 04 22 1139 32

Escalabilidad Horizontal: El controlador nunca cambia (32 líneas). Nuevos archivos añadidos (+9) pero código existente intacto. Cada decorator es una unidad enfocada y testeable. Mayor coste inicial paga dividendos a medida que el dominio evoluciona.

Métricas Clave

Total de Archivos (Fase 04)

22

+9 archivos, todos nuevos decorators

Total de Líneas de Código

1139

+169% crecimiento P01→P04

Tamaño del Controlador (Todas las Fases)

32 líneas

Cero crecimiento en todas las fases

Puntuación de Testeabilidad

Excelente

Dominio puro, no necesita BD

Conclusión

Escalabilidad horizontal a un coste.

A04 es el enfoque más sofisticado. Cumple la promesa del Principio Abierto/Cerrado: el sistema crece a través de nuevos archivos, no modificaciones. Cada decorator es enfocado, testeable e independiente. La Fase 05 añadiría unos pocos nuevos decorators sin tocar código existente.

El compromiso es una complejidad inicial significativa: 22 archivos y 1139 líneas para la Fase 04. Esta inversión se justifica cuando las reglas cambian frecuentemente, pero es excesivo para dominios estables. Este es el patrón al que recurrir cuando sabes que tu dominio evolucionará rápidamente y necesita protección contra fragilidad.

✓ Cuándo usar A04

  • Las reglas de precio cambian frecuentemente e impredeciblemente
  • El negocio espera mantenimiento y evolución a largo plazo
  • El equipo tiene experiencia con patrones de diseño y composición
  • Cada regla debe ser testeable y desplegable de forma independiente
  • Necesitas extensibilidad sin modificación de código existente