Saltar al contenido

El problema de las arquitecturas complejas

Las arquitecturas en el desarrollo de software, por ejemplo, la hexagonal, suenan muy bien en teoría: capas organizadas, comunicación estructurada, escalabilidad garantizada. En la práctica, se vuelven un laberinto de complejidad que pocos dominan realmente. Los foros están llenos de preguntas sobre cómo crear un servicio que respete las capas, cómo comunicar dominios, dónde poner cada pieza. Si tu arquitectura genera más dudas que soluciones, algo está fallando.

Llevo años aplicando técnicas más simples en proyectos medianos y grandes con resultados consistentemente buenos. No necesitas implementar todas a la vez; puedes empezar con una y añadir las demás progresivamente según tus necesidades.

Técnica 1: Actions - Libera tus controladores

El problema que resuelven

Controladores de 500, 800, hasta 1000 líneas que mezclan validación, lógica de negocio, envío de correos, manipulación de datos. Imposibles de testear, imposibles de mantener, imposibles de entender para alguien nuevo en el proyecto.

La solución con Actions

Una Action es una clase con una única responsabilidad. CreateUserAction solo crea usuarios. Simple, testeable, reutilizable desde controladores, jobs, comandos o donde necesites.

Cuando el proceso es complejo (crear usuario, enviar notificación, notificar admin, sincronizar con CRM), uso Actions compuestas con el patrón Pipeline. Cada paso es una clase independiente que recibe un passable con los datos compartidos. Todo dentro de una transacción, con manejo consistente de errores.

El resultado: controladores de pocas líneas que solo orquestan, Actions que solo hacen una cosa fáciles de testear unitariamente, y procesos complejos divididos en piezas manejables.

Aprende más sobre Actions en Laravel

Técnica 2: ViewModels - Datos estructurados para presentación

El problema que resuelven

Preparar datos para vistas o APIs genera código repetitivo y desorganizado. Los controladores crecen con lógica de presentación y cada vista requiere información diferente.

La solución con ViewModels

Un ViewModel es una clase dedicada exclusivamente a preparar datos para presentación. Usando la API de reflexión de PHP, los métodos públicos se convierten automáticamente en variables disponibles en la vista.

Funciona con Blade, Livewire, Vue, Inertia o APIs. Un lugar para toda la lógica de presentación, con herencia y composición cuando lo necesites.

Domina los ViewModels en Laravel

Técnica 3: Filtros con Pipeline - Búsquedas elegantes

El problema que resuelven

Búsquedas complejas terminan en controladores llenos de if anidados o scopes gigantescos en los modelos. Un modelo Usuario con 15 columnas puede necesitar diferentes combinaciones de filtros según el contexto.

La solución con Filtros y Pipeline

Cada filtro es una clase independiente: ActiveFilter, DateRangeFilter, PriceFilter. Usando el patrón Pipeline, compones los filtros que necesitas para cada contexto.

Un buscador del backoffice puede usar ciertos filtros, mientras que la API usa otros. Escribes cada filtro una vez, lo reutilizas donde necesites. Testeable individualmente, componible infinitamente.

Implementa Filtros Escalables en Laravel

Técnica 4: Modelos Organizados - Separación de responsabilidades

El problema que resuelven

Modelos de 500+ líneas mezclando relaciones, scopes, mutators, accessors, eventos, lógica de negocio. Conflictos constantes en Git, duplicación accidental de métodos, imposibles de navegar.

La solución: Concerns organizados

Separa responsabilidades sistemáticamente:

  • HasRelations: todas las relaciones en un trait

  • HasAttributes: mutators y accessors separados

  • HasScopes o mejor aún, un Builder personalizado para consultas

  • Modelo base abstracto con configuración

  • Modelo final solo con lógica de negocio esencial, limpio y claro

Organiza tus Modelos Eloquent

Beneficios comprobados de estas técnicas

Mantenibilidad: Código organizado en responsabilidades claras. Los cambios son predecibles y seguros.

Colaboración eficiente: Cuando alguien nuevo llega, puede entender la estructura en minutos. "Los filtros van aquí, las actions allá, los ViewModels manejan presentación".

Testing real: Clases pequeñas con una responsabilidad son fáciles de testear. Un test unitario para un filtro son 20 líneas. Para una action, 30. Coverage real, no solo pasar tests de feature.

Escalabilidad natural: El proyecto crece ordenadamente sin acumular deuda técnica.

Implementación gradual sin dolor

No necesitas refactorizar todo de golpe. Mi recomendación:

  • Extrae las actions de tus controladores más complejos

  • Implementa ViewModels en las pantallas con más datos

  • Refactoriza búsquedas existentes con Filtros y Pipeline

  • Organiza modelos grandes con traits especializados

Cada técnica es independiente. Puedes implementar solo las que necesites, cuando las necesites.

La diferencia entre código que funciona y código profesional

He trabajado en proyectos con métodos de 800 líneas donde buscar algo es imposible, testear es impensable, y refactorizar requeriría meses, por no decir la incertidumbre de romper todo al realizar cualquier cambio. Ese es el precio de no organizarse desde el inicio.

Estas técnicas no son arquitecturas complejas. Son patrones simples, probados, que funcionan. No generan debates filosóficos sobre qué capa corresponde a cada cosa. Son predecibles: si necesitas lógica de negocio, creas una action; si necesitas presentación, un ViewModel; si necesitas búsqueda, filtros con pipeline; si tu modelo crece, lo organizas con traits.

El código limpio no es un lujo. Es un regalo para tu yo del futuro y tu equipo. No se trata de que luzca mejor, sino de que sea mantenible, testeable y comprensible dentro de seis meses.


school Curso completo

Curso Laravel 12
Completo 2026

El único curso 100% actualizado que incluye Laravel 12, Livewire 3, Vue 3, React 19 e Inertia 2. Aprende con proyectos reales y las últimas funcionalidades.

access_time 8 horas de contenido
layers 4 tecnologías en 1
update 100% actualizado
code Proyectos prácticos
Ver Curso Laravel 12 arrow_forward

star Incluido en cualquier suscripción

Rutas de aprendizaje