Deja de utilizar Jobs con las notificaciones

Spread the love

Tranquilos no me refiero a dejar de usar Queues junto con las notificaciones, que es necesario hacerlo cuando nuestro caso de uso amerita su utilización.

Y de hecho su uso es común para mejorar la experiencia de usuario.

A lo que me refiero es a crear un Job como medio para usar queues. El ejemplo que vamos a usar lo vi en youtube y en un punto el autor utiliza un job como forma de encapsular el código que no corresponde al controlador.

//método handle del job
public function handle()
{
    $admin = User::whereRole('admin')->first();
​
    if($admin) {
        $admin->notify(new PostCreatedNotificaction($this->post));
    }
}

Y te preguntaras

¿Qué tiene esto de malo?

El punto malo en esto, es que no es necesario usar un Job ya que las notificaciones al igual que los eventos se pueden mandar a un Queue sin necesidad del Job.

cara-sopresa

Donde sucede la magia:

Eso lo podemos comprobar fácilmente, si revisamos un poco el código

public function send($notifiables, $notification)
{
    $notifiables = $this->formatNotifiables($notifiables);
​
    if ($notification instanceof ShouldQueue) {
        return $this->queueNotification($notifiables, $notification);
    }
​
    return $this->sendNow($notifiables, $notification);
}

En la condición puedes observar que para enviar una notificación a un Queue, solo necesitas implementar la interfaz ShouldQueue

De esta forma es innecesario crear un Job. de tal forma que el ejemplo anterior solo debe de llamar a la notificación y Laravel se encargara de forma transparente de enviarla a un queue con el driver correspondiente.

Así que solo es necesario que la notificación implemente la interfaz:

namespace App\Notifications;
​
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
​
class PostCreatedNotificaction extends Notification implements ShouldQueue
{
    use Queueable;
​
    // ...
}

Y finalmente el código quedaría fuera del Job.

$admin = User::whereRole('admin')->first();
​
if($admin) {
 $admin->notify(new PostCreatedNotificaction($this->post));
}

Conclusión

Para finalizar es importante que usemos la documentación antes de hacer uso de algún componente de Laravel y también no uses lo que proporciona el framework, como forma de justificar una refactorización si no lo requieres,

siempre existen otras formas de hacer el trabajo.

Les dejo los vídeos donde vi este detalle Laravel Bussines,, Tips de Laravel

Si les gusto el Post compártelo y si tienes alguna duda deja tu comentario!