"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Centralize sua notificação e tratamento de trabalhos

Centralize sua notificação e tratamento de trabalhos

Publicado em 2024-11-08
Navegar:383

Centralize your notification and job handling

Para simplificar o envio de várias notificações por e-mail após vários eventos (como criação de usuário, redefinições de senha, etc.), você pode seguir algumas etapas para centralizar sua notificação e tratamento de trabalhos. Essa abordagem tornará seu trabalho mais fácil e escalonável sem a necessidade de criar um trabalho ou notificação separada para cada evento.

Estratégias para simplificar o tratamento de notificações por e-mail:

  1. Use um trabalho de notificação por e-mail generalizado.
  2. Aproveite a arquitetura de ouvinte de eventos.
  3. Notificações semelhantes do grupo.

1. Criar um trabalho de notificação generalizada por e-mail:

Em vez de criar trabalhos separados para cada notificação, você pode criar um único trabalho reutilizável que usa a notificação e o usuário como parâmetros. Dessa forma, o mesmo trabalho pode ser usado para lidar com notificações diferentes.

SendEmailNotificationJob 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);
    }
}

Com esse trabalho generalizado, você pode enviar diferentes tipos de notificações por e-mail usando o mesmo trabalho:

Exemplo de uso:

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. Aproveite a arquitetura de ouvinte de eventos:

Em vez de despachar trabalhos manualmente após cada evento, a arquitetura de ouvinte de eventos do Laravel permite que você acione automaticamente notificações e trabalhos com base em eventos específicos (como criação de usuário).

Etapa 1: Definir eventos:

Você pode definir um evento como UserCreated:

php artisan make:event UserCreated

Exemplo de evento criado pelo usuário:

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;
    }
}

Etapa 2: criar ouvintes:

Você pode criar um listener que envia uma notificação quando o evento é disparado:

php artisan make:listener SendUserWelcomeNotification --event=UserCreated

Exemplo de ouvinte:

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());
    }
}

Etapa 3: Evento de disparo na criação do usuário:

Sempre que um usuário é criado, você pode disparar o evento, e o Laravel cuidará automaticamente do resto:

use App\Events\UserCreated;

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

Essa abordagem permite dissociar a lógica de tratamento de notificações da sua lógica de negócios, tornando o sistema mais escalonável.

3. Notificações semelhantes de grupo:

Se você tiver muitas notificações semelhantes (por exemplo, notificações relacionadas ao usuário, como e-mails de boas-vindas, redefinições de senha etc.), poderá criar um Serviço de Notificação que processa todas as notificações do usuário de maneira centralizada.

Exemplo de NotificationService:

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
}

Exemplo de uso:

Em seus controladores ou ouvintes de eventos, agora você pode simplesmente chamar o serviço:

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

Conclusão:

  • Trabalho único: você pode usar um trabalho generalizado (SendEmailNotificationJob) para lidar com diferentes tipos de notificações.
  • Arquitetura de ouvinte de eventos: Utilize o sistema de ouvinte de eventos do Laravel para acionar automaticamente notificações com base em eventos do sistema.
  • Serviço de notificação centralizado: Agrupe notificações semelhantes em um serviço para melhor gerenciamento e reutilização.

Essa abordagem ajuda a manter seu código DRY (Don’t Repeat Yourself) e facilita a manutenção quando você tem várias notificações por e-mail para enviar.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/msnmongare/centralize-your-notification-and-job-handling-1oid?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3