2

ここの新人。

Ray Ryan の Google IO トークから始めて、Google Developers サイトのいくつかの記事をフォローしました。GWTP、MVP4G、GIN などの GWT アドオンは使用していません。GWT サイトの連絡先の例に従って、私のケースをモデル化しようとしました。

ヘッダー、左側のナビゲーション ツリー、中央のメイン パネルを持つ DockLayout パネルがありますこれはすべて、 DefaultPresenterを実装する単一のDefaultViewにあります。

これで、ユーザーがツリーで何かを実行したときにポップアップするDialogBoxがあり、これはそれぞれDialogViewDialogPresenterでモデル化されています。

DialogBoxを非表示にすると、AppControllerからDefaultPresenterの新しいインスタンスを呼び出すことになり、これにより新しい DefaultViewが作成され、メインの中央パネルでのツリーの選択とその他の変更がすべてなくなります。

  1. 履歴の変更時にプレゼンターのインスタンスを新しく作成せずに再利用することはできますか? (たとえば、私の場合はDefaultPresenter )
  2. MVP パターンでプレゼンター間で値を保持してコントロールを渡す方法はありますか?
  3. イベント発生時にアプリ コントローラー内にプレゼンターの既存のインスタンスを読み込む方法は?

それとも、MVP アーキテクチャ全体が間違っているのでしょうか? コンポーネントごとに異なるプレゼンターとビューを使用することを計画しています: HeaderPresenter / HeaderView、TreePresenter / TreeView 、 MainContentPresenter/MainContentView ?必要なプレゼンターの新しいインスタンスのみを作成し ( MainContentPresenter など)、既存のものを保持します。そのまま ( TreePresenter や HeaderPresenter など) これで問題は解決しますか? ブラウザ ウィンドウでこのさまざまなビューをすべてつなぎ合わせるにはどうすればよいでしょうか。私は UiBInder を使用していません。基本に固執しているだけです。

すべての専門家を助けてください、私は行き詰まりに陥っています!

4

1 に答える 1

2

あなたの質問を読んだとき、答えはGWT アプリのステートフル プレゼンター アーキテクチャに沿った記事であるべきだと感じました。ただし、これは StackOverflow であり、簡潔さがすべてなので、見てみましょう。

回答

1.履歴の変更時に新しいプレゼンターを作成せずに、プレゼンターのインスタンスを再利用することはできますか?

絶対。ビューに挿入された一連のシングルトン プレゼンターを切り替えることを妨げるものは何もありません (切り替えはActivityMapperの実装で行われます)。これ以降、プレゼンターはActivityであるという前提に注意してください。

2.MVP パターンでプレゼンター間で値を保持してコントロールを渡す方法はありますか?

プレゼンターはシングルトンになったため、メンバー変数の状態を保持します。プレゼンター間のメッセージ交換には、イベントとEventBusが友達です。

3.イベント発生時にアプリ コントローラー内にプレゼンターの既存のインスタンスを読み込む方法は?

ActivityManagerにActivityMapper登録されたインスタンスは、十分なはずですは、インターフェイスのActivityManager実装に依存して、シングルトン プレゼンターの 1 つを返します。public Activity getActivity(Place place)ActivityMapper

資力

David Chandler の Google I/O 2011 GWT セッションでは、まさにこのタイプのマスター/詳細アーキテクチャに触れています。私は一般的にそれを強くお勧めします。この質問では特に、David がアクティビティと場所の徹底的な概要を説明し始める 18 分後の部分を強くお勧めします。

于 2012-07-06T15:04:34.780 に答える