En el desarrollo con Laravel, los observers son una herramienta poderosa que facilita la conexión de clases con los modelos de Eloquent, permitiéndonos escuchar y responder a los eventos que estos modelos emiten. Sin embargo, aunque los observers ofrecen ventajas significativas, también presentan ciertos desafíos que pueden afectar la mantenibilidad y claridad del código, especialmente en entornos de desarrollo colaborativos o con alta rotación de personal.
¿Qué son los Observers en Laravel Eloquent?
Los observers en Laravel son clases que contienen métodos que escuchan y responden a los eventos del ciclo de vida de los modelos de Eloquent, como created, updated, deleted, entre otros. La principal ventaja de utilizar observers es la separación de responsabilidades, lo que evita que los modelos se sobrecarguen con lógica adicional relacionada con estos eventos.
Cómo Crear un Observer
Para crear un observer, simplemente ejecutamos el siguiente comando en la terminal:
sail artisan make:observer NombreDelObserver --model=NombreDelModeloPor ejemplo, para crear un observer para el modelo User, ejecutaríamos:
sail artisan make:observer UserObserver --model=UserEsto generará una clase llamada UserObserver dentro del directorio app/Observers, donde podremos definir métodos correspondientes a los eventos que queremos manejar, como created, updated, etc.
Registrar el Observer
Una vez creado el observer, debemos registrarlo para que Laravel sepa que debe utilizarlo con el modelo correspondiente. Esto lo podemos hacer directamente en el modelo User utilizando el atributo ObservedBy de la siguiente manera:
Ventajas de Utilizar Observers
Separación de Lógica: Mantiene los modelos limpios y enfocados en su responsabilidad principal, delegando la lógica de los eventos a clases dedicadas.
Reutilización de Código: Permite reutilizar la lógica de los eventos en diferentes partes de la aplicación sin duplicar código.
Mantenibilidad: Facilita la actualización y mantenimiento del código al tener una estructura más organizada.
Problemas y Desventajas de los Observers
A pesar de sus ventajas, los observers presentan varios desafíos:
Encapsulamiento Excesivo: La lógica dentro de los observers puede estar demasiado encapsulada, haciendo difícil entender qué acciones se están llevando a cabo realmente cuando se dispara un evento.
Falta de Visibilidad: En proyectos con múltiples desarrolladores o alta rotación de personal, puede ser complicado rastrear qué observers están activos y qué están haciendo, ya que la conexión entre el modelo y el observer no siempre es evidente.
Curva de Aprendizaje: Los desarrolladores menos experimentados pueden no estar familiarizados con el concepto de observers, lo que puede llevar a la implementación inconsistente o a la falta de utilización de esta herramienta.
Ejemplo de Problema
Imaginemos que tenemos un observer UserObserver que, al crearse un usuario, notifica al administrador y al propio usuario. Si un nuevo desarrollador se une al equipo, puede que no sepa que existe este observer y que la creación de un usuario desencadena estas notificaciones automáticamente. Esto puede llevar a confusiones y errores al intentar modificar o extender la funcionalidad.
Alternativa: Uso de Eventos y Listeners
Para abordar estos problemas, una alternativa recomendada es utilizar eventos y listeners en lugar de observers. Esta metodología ofrece una mayor visibilidad y control sobre lo que sucede en cada evento, facilitando la comprensión y el mantenimiento del código.
Cómo Implementar Eventos y Listeners
Crear un Evento:
sail artisan make:event UserCreatedEste comando generará una clase de evento donde podemos definir la información que queremos pasar a los listeners.
Crear un Listener:
sail artisan make:listener SendUserNotification --event=UserCreatedEste comando crea un listener que se ejecutará cuando se dispare el evento
UserCreated.Disparar el Evento:
En la acción donde se crea el usuario, disparamos el evento:
Ventajas de Usar Eventos y Listeners
Claridad y Transparencia: Al disparar explícitamente eventos en las acciones, se hace evidente qué procesos están ocurriendo, facilitando la comprensión del flujo de la aplicación.
Flexibilidad: Permite agregar o quitar listeners sin afectar la lógica principal de las acciones.
Facilidad de Mantenimiento: Los desarrolladores pueden ver claramente qué eventos se están disparando y qué listeners están asociados, lo que simplifica la tarea de depuración y extensión de funcionalidades.
Conclusión
Aunque los observers en Laravel Eloquent ofrecen una forma organizada de manejar eventos del ciclo de vida de los modelos, su encapsulamiento puede generar dificultades en equipos grandes o con alta rotación de personal. La alternativa de utilizar eventos y listeners proporciona una mayor claridad y control sobre las acciones que se llevan a cabo, mejorando la mantenibilidad y comprensión del código.
Gracias por tu tiempo y nos vemos en el próximo artículo, pero antes, te dejo con el vídeo que he preparado para este artículo.
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.
star Incluido en cualquier suscripción