3

私はGWTを使用してWebアプリケーションを作成しており、GWT WebサイトのMVPチュートリアルHistoryに従っています(つまり、ナビゲーションに使用しています)。

ナビゲーション用のサイドバーを使用する最善の方法について少し混乱しています(つまり、ナビゲーションリンクをクリックすると、メインウィンドウのコンテンツが変更されます。以下を参照してください)。

--------------------
|     |            |
| nav |   main     |
|     |    window  |
|     |            |
|     |            |
--------------------

<div>これを行うための1つの潜在的な方法は、ナビゲーションとコンテンツ用にHTMLで2つのタグを宣言することです。例えば:

@Override
public void onValueChange(ValueChangeEvent<String> event) {

    ...

    if (token.equals("navigation")) {
        presenter = new NavigationPresenter(rpcService, eventBus, new NavigationView());
        presenter.go(RootPanel.get("navigation"));
    }

    ...

    if (token.equals("content")) {
        presenter = new ContentPresenter(rpcService, eventBus, new ContentView());
        presenter.go(RootPanel.get("content"));
    }

    ...
}

これがこれにアプローチする最良の方法であるかどうかはわかりません。(ナビゲーションパネルとコンテンツウィンドウ間の双方向通信は、次の方法で実行できるとEventBus思いますか?UIの変更に関しては、この方法は柔軟ですか(モバイルサイトなど))

私は人々がこれについて行くための最良の方法は何を提案するのだろうかと思っていました。私はよく読んで、アクティビティと場所についての議論にたどり着きますが、私が理解しているように、これらはMVPアーキテクチャとは多少異なります(アクティビティと場所はブラウザの履歴管理に役立ちますが、私の使用はそれをHistoryカバーしていると思います(?))

任意の提案をいただければ幸いです。

4

2 に答える 2

3

はい、その通りです。Activies and Places履歴とナビゲーション管理、内部のフレームワークについてGWTです。MVP単に建築デザインパターンです。MVPリンクした記事に示されているようなフレームワークを使用して実現できます。

サンプルでは、​​あなたが言うように行うことができますが、潜在的に高価な再作成を避けるために、各ビューを(遅延)シングルトンにします。Display個人的に私はこの方法が好きではありません、あなたは(非常に多くの)HasXxxインターフェースの観点からあなたのを定義することになります。

履歴管理が重要な場合、選択はほとんど簡単だと思いますActivities and Places(少なくとも私にとって、そして少なくともアプリのスケルトンを定義するために)。ここでは、始めるための本当に良い記事を見つけることができます。そして、ユースケースがどれほど一般的であるかがわかります。場所の変更に反応して(アクティビティマネージャーのおかげで)表示される領域(ナビゲーションとメインエリア)を定義し、UIを更新するアクティビティを作成/再開する必要があります。 。MVPこのようにして、プレゼンターがアクティビティである、ある種のアプリ全体を実現します。

これを行うための最良の方法MVPはありません。パート1パート2、およびA&Pを使用したMVPは、同じ目標を達成するための単純に異なる方法です。プレゼンテーションとビジネスロジックの分離、および純粋なjunitテストです。好きなものを選ぶだけです。参照用にグループに関するこの投稿を参照してください。

それがあなたが始められることを願っています。

于 2013-03-26T15:42:15.867 に答える
0

私のアプリでは、GWTドキュメントと同じようにClientFactoryを使用し、ビューにはシングルトンを使用しています。

このように、アプリケーション構造(メニューを含む)もClientFactoryで参照されるシングルトンであるため、他のすべてのビューは、そのインターフェイスを介して仮想的に直接アクセスできます。

たとえば、一部のビューでは、ヘッダー内の画像をプッシュしたり、メニューを非表示にしてビデオを表示したり、その他必要なものを表示したりできます。ほとんどの場合、アプリの構造には、履歴スタック内の状態を「永続化」するための個別のアクティビティ/場所は必要ありません...

ほとんどの人がビューを互いに呼び出すことを好まないことを私は知っています、そして私もそうです、唯一の例外はアプリの構造ビューです。これは一種の特定のものです:それはアクティビティではないプレゼンターとビューを持っていますそれ自体は永続的に表示されます。

アプリの構造と通知を使用して他のビューとの間で通信すると、アプリはスパゲッティボウルになります。私は、ビュー間で通信するためにイベント/通知に大きく依存するPureMVCのようなフレームワークを使用してきましたが、分離には、保守性とコードの可読性という高額なコストがかかります。

于 2013-03-26T20:28:34.827 に答える