6

GWT で MVP のようなアプリケーションを作成しています。

  • 複数のパネルがあり、それぞれが常に表示されます。
  • 各パネルにはプレゼンターがあり、すべてのプレゼンターの上に単一の AppController があります。
  • 1 つのプレゼンター内で発生するが、他のプレゼンターに影響を与えるアプリケーション レベルのイベントがいくつかあります。
  • これに推奨されるアーキテクチャには、イベント バスが含まれているようです。ただし、単純なものよりも利点があるかどうかはわかりません。
  • 特に、単純に AppController (および AppController のみ) が任意のプレゼンターからのイベントをサブスクライブできるようにする方がクリーンではないでしょうか? その後、AppController は、イベントが与えられたときに、各プレゼンターに何をすべきかを伝えることができます。
  • 「イベントバス」は準グローバル変数のようです。しかし、より正確に定義されたメソッド (つまり、AppController が各プレゼンターで呼び出すメソッド) を使用して同じことを達成できれば、それは望ましいことではありませんか?

私の懸念をより正確に言えば、単にイベントを適切な意思決定レベルに「バブルアップ」させるのではなく、イベントバスを導入するのはなぜですか? 私には、これは MVP 概念の最も単純な拡張のように思えます。イベント バスの新しいアイデアは必要ありません。Event Bus がどのような問題を解決するために導入されたのか理解できません。

4

2 に答える 2

3

提案されたアプローチは問題ありませんが、大きな欠点が 1 つあります。それは、アプリが大きくなると、スパゲッティ コードが必要になることです。

このプレゼンテーションは Android に関するものですが、議論は GWT にも当てはまります。

イベント バスを使用してスパゲッティ コードと戦うことについて明示的に説明している Google I/O 2009 の有名なプレゼンテーションも参照してください(まだ見ていない場合は必見です)。

最後に、このブログ投稿では、JS のオブザーバー パターンとメディエーター パターンについて説明します。GWT では、オブザーバーパターンイベントハンドラーによって実現されますが、メディエーター パターンはイベント バスによって実現されます。これがtl;drです。»

于 2013-02-12T09:26:02.307 に答える