Eventbusはメディエーターまたはオブザーバーですか?Googleによると、「eventbusメディエーター」は2.430ヒット、「eventbusobserver」は3.850ヒットです。
説明から、それらは両方とも私がやろうとしていたことと一致するでしょう(メディエーターはもう少しです)。それで、eventbusは特定のパターンを実装しますか、それとも私が言うのは私次第ですか?
Eventbusはメディエーターまたはオブザーバーですか?Googleによると、「eventbusメディエーター」は2.430ヒット、「eventbusobserver」は3.850ヒットです。
説明から、それらは両方とも私がやろうとしていたことと一致するでしょう(メディエーターはもう少しです)。それで、eventbusは特定のパターンを実装しますか、それとも私が言うのは私次第ですか?
多くの場合、特定のコードは本質的に1つのパターンまたは別のパターンの例ではありません。これが、それらが「パターン」と呼ばれる理由です(たとえば、「実装手法」ではありません)。多くのソフトウェアは、あるパターンのように見えますが、別のパターンにも似ています。これは良いことです。パターンのためにパターンに固執するのではなく、アーキテクチャを議論するための共有語彙としてそれらを使用するのが最善です。
EventBusはそのようなツールの1つです。オブザーバーのような状況を念頭に置いて作成しましたが、アプリケーションを適切に構成すれば、メディエーターのような役割を果たすことができます。
EventBusの一般的な使用法は、イベントを発生させることです。オブザーバーという言葉の使用は、それに適しています。オブザーバーパターンは、イベントまたはメッセージを使用して、監視対象のオブジェクト(変更)に関する対象オブジェクトの変更を通知します。Mediatorも2つの実装を切り離そうとしますが、ある意味ではObserverよりも具体的であり、2つのオブジェクト/インターフェースについてすべてを知ることができ、これら2つを機能させるための接着剤として機能します。オブザーバーは、内部やインターフェースについてさえ知っているとは主張していません。知っている、または気にしているのは、イベントが発生したときに、関心のあるオブジェクトに通知する必要があることだけです。
メディエーターはシナリオ固有のセットアップである可能性がありますが、オブザーバーはより一般的である可能性があります。
EventBusは、ほとんどの場合、アプリケーションのスコープ内でシングルトンであるため、ほとんどの場合、ランタイム内のさまざまなモジュール/オブジェクト間でグローバルにメッセージングを容易にすることが本当の目的であるため、EventBusをオブザーバーを使用するものとして分類します。
ウィキペディア:メディエーターパターンの本質は、「オブジェクトのセットがどのように相互作用するかをカプセル化するオブジェクトを定義する」ことです。
EventBusはこれを行いません。
EventBusもオブザーバーパターンではありません。N個のオブジェクトがあり、それらすべての間で通信する場合、オブザーバーパターンを使用する場合はN * Nオブザーバーが必要ですが、同じジョブを実行するには1つのグローバルEventBusだけで十分です。
つまり、EventBusはEventBusパターンです。
典型的なイベントバスは、これらのパターンの両方を利用していると思います。
序文には「[...]パブリッシュ/サブスクライブAPI」と書かれているので、オブザーバーを選びます。