「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 通知とジョブ処理を一元化する

通知とジョブ処理を一元化する

2024 年 11 月 8 日に公開
ブラウズ:359

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 のイベント リスナー システムを利用して、システム イベントに基づいて通知を自動的にトリガーします。
  • 集中通知サービス: 管理と再利用性を向上させるために、サービス内で同様の通知をグループ化します。

このアプローチは、コードを DRY (繰り返さない) に保つのに役立ち、複数の電子メール通知を送信する場合の保守が容易になります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/msnmongare/centralize-your-notification-and-job-handling-1oid?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3