45

Observer デザイン パターンをメイン イベント ディスパッチ デザインパターンとして理解しようとしています。Observer パターンはPublish-Subscribe デザイン パターンのタイプまたは種類のように見えますが、なぜ 2 つの似たようなデザイン パターンがあるのか​​、また 2 つからどのように選択すればよいのか疑問に思っています。

どちらの場合も、エンティティ間で情報メッセージが送信されます。どちらの場合も、エンティティは、メッセージを受信するために何らかの方法で登録またはサブスクライブする必要があります。

2 つの設計パターンの主な違いは次のようです。

  • オブザーバー パターンは、メッセージの量が少ないようです。オブザーバーは、特定のイベントの通知を受けるために、観察しているエンティティに登録します。パブリッシュ-サブスクライブ パターンは、一方向の会話、つまり、より多様な種類のメッセージを大量に含む、あるエンティティから別のエンティティへの一種のモノローグを伴うようです。
  • オブザーバー パターンでは、オブザーバーは特定の種類のイベント通知を期待します。パブリッシュ-サブスクライブは、可能なメッセージ タイプとメッセージ コンテンツの範囲がより広い、よりオープンなメッセージ プロトコルを持っているようです (特定の種類のイベントによってトリガーされるメッセージとの違い)。定期的なタイマーによってトリガーされた温度データを含むメッセージなど、イベントトリガー以外の可能性がある情報を含むメッセージを使用して、イベントが発生したことを示すより一般的なメッセージプロトコルに対して)。
  • オブザーバーは、アプリケーションの境界内または単一のプロセス内に実装されます。Publish-Subscribe は、異なるプロセス間でメッセージが交換されるクロス アプリケーション通信パターンです。
  • Publish-Subscribe には個別のパブリッシャー、ブローカー、サブスクライバー エンティティがあるのに対し、Observer はパブリッシャー/ブローカーとサブスクライバー (オブザーバー) エンティティを組み合わせて使用​​するというアーキテクチャの違いがあります。

頭に浮かぶ 1 つの考えは、マルチスレッド アプリケーションでは、オブザーバー パターンではなく、複数のスレッド間で通信するときに Publish-Subscribe パターンが使用される可能性があるということです。また、オブザーバー パターンをプロセス間で使用することもできます。たとえば、プロセスが別のプロセスに登録して、イベントが発生した場合に通知を受けるようにすることができます。例としては、複数の動物用飼料ビンに登録して、ビンによって測定された飼料レベルまたは重量がしきい値を下回った場合に通知を受ける農場管理ダッシュボード アプリケーションがあります。

これら 2 つの設計パターンの間に、どちらか一方を選択する基準となる重要な違いは他にありますか?

4

0 に答える 0