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

A01 — Monolithic Eloquent

Uso directo del ORM con lógica de negocio en modelos y controladores

Patrón: Active Record / Monolito

Filosofía: Abraza el ORM como abstracción principal. Iteración rápida, mínimo boilerplate.

Descripción

A01 utiliza los modelos Laravel Eloquent directamente en la capa del controlador. La lógica de negocio reside en métodos del modelo y acciones del controlador. Este enfoque prioriza el desarrollo rápido sobre el mantenimiento a largo plazo.

Fortalezas:

  • Configuración mínima; empieza a codificar inmediatamente
  • Aprovecha el query builder expresivo de Eloquent
  • Rápido para añadir lógica de negocio simple
  • Sin overhead de abstracción

Debilidades:

  • Acoplamiento estrecho con la capa de base de datos
  • Lógica dispersa entre modelos y controladores
  • Difícil de testear sin una base de datos
  • La complejidad crece exponencialmente con reglas de dominio
  • Reglas de negocio hardcodeadas son frágiles

Evolución a través de Fases

Fase Archivos Líneas de Código Controlador (líneas)
Fase 01 6 218 83
Fase 02 6 326 123
Fase 03 6 398 141
Fase 04 7 466 184

Advertencia: El controlador creció 122% (83 → 184 líneas). Toda la complejidad concentrada en un único método manejando 13 responsabilidades distintas.

Métricas Clave

Total de Archivos

7

Sin crecimiento entre fases

Total de Líneas de Código

466

+114% crecimiento P01→P04

Tamaño del Controlador (Fase 04)

184 líneas

+101 líneas desde Fase 01

Puntuación de Testeabilidad

Baja

Requiere mocking de base de datos

Conclusión

La simplicidad tiene un coste exponencial.

A01 es el más rápido para empezar pero se vuelve inmanejable a medida que crece la complejidad del dominio. El controlador maneja múltiples responsabilidades con lógica de negocio hardcodeada. Los descuentos de early booking se parsean usando manipulación de strings (str_starts_with + explode), creando código frágil y difícil de mantener.

En la Fase 04, el único método del controlador se ha vuelto imposible de testear de forma aislada, y añadir nuevas reglas de precio requiere modificaciones cuidadosas para evitar romper la lógica existente.

✓ Cuándo usar A01

  • Prototipo o prueba de concepto con lógica estable y simple
  • Desarrollador único, equipo pequeño, timeline corto de proyecto
  • Cuando estás seguro de que la complejidad del dominio no crecerá significativamente