Design Pattern Observer: 強力な通知システム

DDD
リリース: 2024-09-13 06:33:11
オリジナル
942 人が閲覧しました

アプリケーションの開発では、アプリケーションがイベントに柔軟に反応できることが必要になることがよくあります。たとえば、特定のアクション (ユーザー登録など) が発生したときに複数のシステムに通知したいとします。ここで、パターン オブザーバーが登場します。このパターンを使用すると、オブジェクト間の関係を確立できるため、1 つの状態が変化すると、他のすべてのオブジェクトが自動的に通知され、更新されます。

Symfony はイベント ディスパッチャーのおかげでこのパターンをすでに効果的に実装しているため、プロジェクトで使用するのに非常に実用的で強力です。

パターンオブザーバーとは何ですか?

パターン オブザーバーを使用すると、観察対象と 1 人以上のオブザーバーの間の関係を定義できます。観察対象のオブジェクトで状態の変化が発生すると、すべての観察者が通知を受けて、それに応じて対応できるようになります。

その仕組みは次のとおりです:

  • ? Subject (Observable): 状態を変更する主要なオブジェクト。
  • ?オブザーバー: オブザーバブルの変化に反応するオブジェクト。

ユーザーが登録できるサイトがあると想像してみましょう。登録するたびに、ウェルカム メールを送信し、ユーザーをニュースレター リストに追加し、分析システムに通知する必要があります。

すべてを 1 か所で厳密にコーディングするのではなく、これらのタスクをさまざまなオブザーバーに委任して、「登録ユーザー」イベントがトリガーされるとすぐに通知を受けることができます。

Symfony でのパターン オブザーバーの実装

Symfony では、イベント ディスパッチャーを使用してパターン オブザーバーをセットアップします。これにより、コードをきちんと整理し、基本的なロジックを変更せずに拡張可能にすることができます。

ステップ 1️⃣: イベントを宣言する

まず、ユーザーの登録時に送出されるイベントを作成します。後者にはユーザーの情報が含まれます。

Le Design Pattern Observer : un système de notification puissant

ステップ 2️⃣: イベントをディスパッチする

ここで、コントローラーまたはサービスで、ユーザーの登録時にこのイベントをディスパッチします。

Le Design Pattern Observer : un système de notification puissant

ステップ 3️⃣: オブザーバー (リスナー) を作成する

次に、登録イベントが送出されるたびに呼び出されるオブザーバーを作成する必要があります。ここでは、電子メールを送信し、ユーザーをニュースレター リストに追加する例を示します。

オブザーバー 1: ウェルカム電子メールを送信する

Le Design Pattern Observer : un système de notification puissant

Watcher 2: ユーザーをニュースレター リストに追加する

Le Design Pattern Observer : un système de notification puissant

ステップ 4️⃣: オブザーバーの構成

次に、リスナーが user.registered イベントをリッスンできるように、設定にリスナーを登録する必要があります。

config/services.yaml で、オブザーバーをサービスとして追加します。

Le Design Pattern Observer : un système de notification puissant

ℹ️ Symfony のバージョン 5.3 以降、PHP 属性を使用してサービスとイベント リスナーを設定できます。これは、services.yaml ファイルを使用する代わりに、クラス内で直接イベントを宣言できる、より新しいアプローチです。
したがって、リスナー メソッドで #[AsEventListener] 属性を直接使用できます。

2 つのオブザーバーを属性で適応させる方法を示します (config/services.yaml で特別な設定は必要ありません? :

観察者1

Le Design Pattern Observer : un système de notification puissant

観察者2

Le Design Pattern Observer : un système de notification puissant

ちょっとした説明

  • #[AsEventListener] 属性は、メソッドが特定のイベントのリスナーであることを示します。
  • 属性の最初の引数は、オブザーバーがリッスンしているイベントの名前 (UserRegisteredEvent::NAME) です。
  • 最後に、method パラメーターは、イベントがトリガーされたときに実行されるクラスのメソッドを指定します (この例では、onUserRegistered)。 ?

ステップ 5️⃣: 実装をテストする

RegistrationController にユーザーを登録すると、イベントが送出され、Symfony は対応するオブザーバーを自動的に呼び出します。これらのアクション/ロジックがビジネス コードと混同されることなく、電子メールが送信され、ユーザーがニュースレター リストに追加されます。

パターン オブザーバーを使用する理由

それは必須だからです!これにより、アプリケーションは次のことが可能になります:

  1. より柔軟: メインコードに手を加えずにオブザーバーを追加または変更できます。リスナーを追加するだけです!
  2. 結合度が低い: アプリのさまざまな部分 は密接にリンクされていません。たとえば、電子メールの送信やニュースレターへの追加は、登録コントローラーで直接コーディングされません。
  3. よりスケーラブル: このパターンにより、複数のシステムまたはサービス (通知、分析、送信など) が関与する可能性のあるイベントに簡単に対応できます。

おまけ: DDD (ドメイン駆動設計) との連携

パターン オブザーバーは、イベントが重要な要素 (ドメイン イベント) である DDD (ドメイン駆動設計) に基づくアーキテクチャでよく使用されます。これらのイベントにより、システムのさまざまな部分 (多くの場合、メイン ドメインの外側) が反応できるようになります。ただし、これについては、DDD に関する将来の完全な記事で説明します!

以上がDesign Pattern Observer: 強力な通知システムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!