«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Централизуйте уведомления и обработку заданий

Централизуйте уведомления и обработку заданий

Опубликовано 8 ноября 2024 г.
Просматривать:392

Centralize your notification and job handling

Чтобы упростить отправку нескольких уведомлений по электронной почте после различных событий (например, создания пользователя, сброса пароля и т. д.), вы можете предпринять несколько шагов по централизации уведомлений и обработки заданий. Такой подход сделает вашу работу проще и масштабируемее без необходимости создавать отдельное задание или уведомление для каждого события.

Стратегии упрощения обработки уведомлений по электронной почте:

  1. Используйте обобщенное задание уведомления по электронной почте.
  2. Использование архитектуры прослушивателя событий.
  3. Группировать похожие уведомления.

1. Создайте обобщенное задание на уведомление по электронной почте:

Вместо создания отдельных заданий для каждого уведомления вы можете создать одно многократно используемое задание, которое принимает уведомление и пользователя в качестве параметров. Таким образом, одно и то же задание можно использовать для обработки разных уведомлений.

Обобщенное задание SendEmailNotificationJob:

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

С помощью этого обобщенного задания вы можете отправлять различные типы уведомлений по электронной почте, используя одно и то же задание:

Пример использования:

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. Использование архитектуры прослушивателя событий:

Вместо того, чтобы вручную отправлять задания после каждого события, архитектура прослушивателя событий Laravel позволяет автоматически запускать уведомления и задания на основе определенных событий (например, создания пользователя).

Шаг 1: Определите события:

Вы можете определить событие, например UserCreated:

php artisan make:event UserCreated

Пример события UserCreated:

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

Шаг 2. Создайте слушателей:

Вы можете создать прослушиватель, который отправляет уведомление при возникновении события:

php artisan make:listener SendUserWelcomeNotification --event=UserCreated

Пример прослушивателя:

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

Шаг 3. Событие пожара при создании пользователя:

Каждый раз, когда создается пользователь, вы можете запустить событие, а Laravel автоматически обработает все остальное:

use App\Events\UserCreated;

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

Такой подход позволяет отделить логику обработки уведомлений от вашей бизнес-логики, что делает систему более масштабируемой.

3. Группировать похожие уведомления:

Если у вас много похожих уведомлений (например, уведомления, связанные с пользователями, такие как приветственные письма, сброс пароля и т. д.), вы можете создать Службу уведомлений, которая будет централизованно обрабатывать все уведомления пользователей.

Пример службы уведомлений:

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
}

Пример использования:

Теперь в ваших контроллерах или прослушивателях событий вы можете просто вызвать службу:

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

Заключение:

  • Одно задание: вы можете использовать обобщенное задание (SendEmailNotificationJob) для обработки различных типов уведомлений.
  • Архитектура прослушивателя событий: используйте систему прослушивателя событий Laravel для автоматического запуска уведомлений на основе системных событий.
  • Централизованная служба уведомлений: группируйте похожие уведомления в службе для лучшего управления и возможности повторного использования.

Этот подход помогает сохранить ваш код СУХИМ (не повторяться) и облегчает его поддержку, когда вам нужно отправить несколько уведомлений по электронной почте.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/msnmongare/centralize-your-notification-and-job-handling-1oid?1. Если обнаружено какое-либо нарушение прав, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3