4

2つの単純な「画面」で構成されるGWTアプリを作成するとします。

  • ユーザーがアプリを最初に起動したときに表示されるメインメニュー(特定のURLに移動します)-この簡単な例では、ログイン画面などを忘れてください
  • ユーザーがメインメニューのボタンをクリックしたときにメインメニューの代わりとなる編集設定の「ページ」/画面/ビュー。この[設定の編集]画面には、ユーザーをメインメニューに戻すボタンもあります。したがって
  • ユーザーは、メインメニューと編集設定の「ページ」(これはGWTであるため、実際には1ページのアプリ)を1日中移動するだけです。

したがって、このための擬似コードは次のようになります。

public class MainMenuPresenter implements Presenter {
    // mainMenuScreen may be a Composite that contains a Button for
    // switching/navigating to the EditPreferencesView
    private MainMenuView mainMenuScreen;
}

public class EditPreferencesPresenter implements Presenter {
    // editPrefsScreen may be a Composite that contains a Button for
    // switching/navigating back to the MainMenuView
    private EditPreferencesView editPrefsScreen;
}

質問:

  1. Placeaとそれに関連するものはこのパラダイムにどのActivitiesように適合しますか?MVPとプレイス/アクティビティのどちらかを選択する場合、アクティビティ/プレイスパラダイムを使用すると、この例はどのようになりますか?
  2. MVPとActivities/Placesがうまく連携できる場合(相互に排他的ではない場合)、GWTのHistory APIをここに実装してMainMenuView、履歴内の1つの「場所」EditPreferencesView、2番目の「場所」として設定し、許可する方法を教えてください。ユーザーがブラウザの戻る/進むボタンを押して、それらを切り替え続けますか?
  3. MVPとアクティビティ/場所が相互に排他的であり、2つから選択する必要がある場合、上記の質問2のコードに変更が必要な点はありますか?

Placeにどのように結びつくかActivityManager、どのように/誰が発砲/処理するかにも興味がありPlaceChangeEventsますが、後で使用するために保存しておきます。これらの概念に進む前に、これらの概念を理解する必要があります。前もって感謝します!

4

1 に答える 1

5

あなたの状況で機能する可能性のあるセットアップ例の概要を説明します。バリエーションはたくさんありますが、シンプルなものに集中したいと思います(そして、これをどこで調整できるかを考えてみることをお勧めします)。

1.URLトークンを定義します

ホストページのURLに追加される「#mainmenu」や「#editprefs」などのURLトークンを選択します。これらはブラウザの履歴に使用されるため、戻るボタンと進むボタンなどが機能します。

URL処理は、DefaultHistorianによって自動的に行われます。PlaceChangeEventは、PlaceControllerによって発生します。

2.トークンをPlaceオブジェクトにマップします

Placeオブジェクトは、単にオブジェクト指向のトークンの抽象化です。これは、より高度なトークンでも解析が必要なパラメーターを受け取ることができるため、便利です。トークンをPlaceオブジェクトにマップする方法が必要になります。これはPlaceHistoryMapperの責任です。

私の例では、PlaceHistoryMapperを手動で実装して、「#mainmenu」をMainMenuPlaceにマップし、「#editprefs」をEditPreferencesPlaceにマップします。

[または、@ WithTokenizersアノテーションを使用して、すべてのタイプの場所に(空の)PlaceTokenizerを実装することもできます。次に、@ Prefixアノテーションを使用して、トークンとして「mainmenu」と「editprefs」を指定できます。]

3.場所をアクティビティにマッピングします

Placeオブジェクト自体は何もしません-上で説明したように、それは基本的に単なる抽象的なトークンです。実際のコードはアクティビティで実行されます。そのため、プレイスをアクティビティにマッピングする必要があります。これはActivityMapperの責任です。

私の例では、MainMenuPlaceをMainMenuActivityにマップし、EditPreferencePlaceをEditPreferenceActivityにマップするように実装します。

4.活動とプレゼンター

簡単にするために、私の例では、アクティビティはプレゼンターも実装します。したがって、MainMenuActivityはMainMenuPresenterを実装します。これはまったく必要ありませんが、おそらく良い出発点です。そして、これはPlaces+ActivitiesがMVPと接続できる場所です。2つの概念は相互に必要ではありませんが、一緒にうまく機能します。

  • Activities + Placesは基本的に、履歴トークンとアクティビティの間の接続に関するものです。
  • MVPは基本的に、プレゼンターとビューの間の接続に関するものです。

アクティビティ(またはそのデリゲートの1つ)にプレゼンターを実装させると、両方が接続されます。

5.概要

"#mainMenu"
---(PlaceHistoryMapper)---> MainMenuPlace
---(ActivityMapper)---> MainMenuActivity implements MainMenuPresenter
于 2012-09-07T23:25:07.767 に答える