"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Centraliza tus notificaciones y gestión de trabajos

Centraliza tus notificaciones y gestión de trabajos

Publicado el 2024-11-08
Navegar:273

Centralize your notification and job handling

Para simplificar el envío de múltiples notificaciones por correo electrónico después de varios eventos (como creación de usuarios, restablecimiento de contraseñas, etc.), puedes seguir algunos pasos para centralizar tus notificaciones y manejo de trabajos. Este enfoque hará que su trabajo sea más fácil y escalable sin tener que crear un trabajo o una notificación por separado para cada evento.

Estrategias para simplificar el manejo de notificaciones por correo electrónico:

  1. Usar un trabajo de notificación por correo electrónico generalizado.
  2. Aprovechar la arquitectura de escucha de eventos.
  3. Agrupar notificaciones similares.

1. Crear un trabajo de notificación por correo electrónico generalizado:

En lugar de crear trabajos separados para cada notificación, puede crear un trabajo reutilizable único que tome la notificación y el usuario como parámetros. De esta manera, el mismo trabajo se puede utilizar para manejar diferentes notificaciones.

Trabajo de notificación de correo electrónico generalizado:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Notifications\Notification;
use App\Models\User;

class SendEmailNotificationJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $user;
    public $notification;

    /**
     * Create a new job instance.
     *
     * @param  User $user
     * @param  Notification $notification
     * @return void
     */
    public function __construct(User $user, Notification $notification)
    {
        $this->user = $user;
        $this->notification = $notification;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // Send the notification
        $this->user->notify($this->notification);
    }
}

Con este trabajo generalizado, puedes enviar diferentes tipos de notificaciones por correo electrónico usando el mismo trabajo:

Uso de ejemplo:

use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;
use App\Models\User;

$user = User::find(1); // Example user

// Dispatch a welcome email notification
SendEmailNotificationJob::dispatch($user, new UserWelcomeNotification());

// Dispatch a password reset notification
SendEmailNotificationJob::dispatch($user, new PasswordResetNotification());

2. Aprovechar la arquitectura de escucha de eventos:

En lugar de enviar trabajos manualmente después de cada evento, la arquitectura de escucha de eventos de Laravel le permite activar automáticamente notificaciones y trabajos basados ​​en eventos específicos (como la creación de usuarios).

Paso 1: Definir eventos:

Puedes definir un evento como UserCreated:

php artisan make:event UserCreated

Ejemplo de evento creado por el usuario:

namespace App\Events;

use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class UserCreated
{
    use Dispatchable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }
}

Paso 2: crear oyentes:

Puedes crear un oyente que envíe una notificación cuando se active el evento:

php artisan make:listener SendUserWelcomeNotification --event=UserCreated

Ejemplo de oyente:

namespace App\Listeners;

use App\Events\UserCreated;
use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;

class SendUserWelcomeNotification
{
    public function handle(UserCreated $event)
    {
        // Dispatch the email notification job
        SendEmailNotificationJob::dispatch($event->user, new UserWelcomeNotification());
    }
}

Paso 3: Evento de incendio al crear un usuario:

Siempre que se crea un usuario, puedes activar el evento y Laravel se encargará automáticamente del resto:

use App\Events\UserCreated;

$user = User::create($data);
event(new UserCreated($user));

Este enfoque le permite desacoplar la lógica de manejo de notificaciones de su lógica empresarial, lo que hace que el sistema sea más escalable.

3. Agrupar notificaciones similares:

Si tiene muchas notificaciones similares (por ejemplo, notificaciones relacionadas con el usuario, como correos electrónicos de bienvenida, restablecimiento de contraseña, etc.), puede crear un Servicio de notificaciones que maneje todas las notificaciones de los usuarios de forma centralizada.

Ejemplo de servicio de notificación:

namespace App\Services;

use App\Models\User;
use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;
use App\Notifications\PasswordResetNotification;

class NotificationService
{
    public function sendUserWelcomeEmail(User $user)
    {
        SendEmailNotificationJob::dispatch($user, new UserWelcomeNotification());
    }

    public function sendPasswordResetEmail(User $user)
    {
        SendEmailNotificationJob::dispatch($user, new PasswordResetNotification());
    }

    // You can add more methods for different types of notifications
}

Uso de ejemplo:

En tus controladores o detectores de eventos, ahora puedes simplemente llamar al servicio:

$notificationService = new NotificationService();
$notificationService->sendUserWelcomeEmail($user);

Conclusión:

  • Trabajo único: Puede utilizar un trabajo generalizado (SendEmailNotificationJob) para manejar diferentes tipos de notificaciones.
  • Arquitectura de escucha de eventos: utiliza el sistema de escucha de eventos de Laravel para activar automáticamente notificaciones basadas en eventos del sistema.
  • Servicio de notificaciones centralizado: agrupa notificaciones similares en un servicio para una mejor gestión y reutilización.

Este enfoque ayuda a mantener tu código SECO (No lo repitas) y hace que sea más fácil de mantener cuando tienes varias notificaciones por correo electrónico para enviar.

Declaración de liberación Este artículo se reproduce en: https://dev.to/msnmongare/centralize-your-notification-and-job-handling-1oid?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3