2011-07-05 10 views
2

私はここで聞かれGWT-MVPの質問をたくさん読みましたが、私はいくつかの質問をお願いしたいと思い、このデザインパターンとは全く新たなんだので、:GWT MVP導入に関する質問

[1]のアクティビティ-Placeパターンはmvpとは異なるパターンですか?

[2] MVPパターンのプレゼンターにはロジックが含まれています。ウィジェット/コントロールのロジックは、アクティビティで定義されていますか?

[3] CustomPlaceクラスは固定されています(Eclipseプラグインがそれらを構築するので)、データ/メソッドとどのような種類のものを置くことができますか?

[4] CustomView内でPresenterインターフェイスを使用するとは何ですか?それに追加するデータ/方法は何ですか?

[5]データベースに保存される多くのデータ構造を使用するアプリケーションを構築したいと考えています。私はここでいくつかの記事を読んで、MVPのモデル部分を各アクティビティの中に配置します。だから私は毎回各アクティビティのデータ構造を作成し、その値を(必要に応じてdbから)ロードし、ユーザーが別のビューに移動した後にデータベースを更新すると考えます。このアプローチについてどう思いますか?

答えて

3
  1. 1つの神話を暴くことから始めるのをしてみましょう:活動/場所はMVPを行うには何もを持っていません。場所はナビゲーションに関するもので、アクティビティはUIの「コンポーネント化」です。一方、MVPは設計パターンであり、コードをどのように整理するかについてです。

  2. 多くの人がMVPプレゼンターとして活動を行っていますが、強制されません。 GWTチームは、アクティビティが発表者とは異なる新しいアプローチを試みています(進行中の状況に従いたい場合は、mobilewebappサンプルで作業中です)。あなたのアクティビティをビューにし、「内部」プレゼンターを使用することもできます(Cellウィジェットの仕組みと同様)

  3. 場所は多かれ少なかれURLです。あなたはあなたが望むものをそれに入れることができます。私は場所を不変にすることをお勧めします:場所を構築するには、goTo、そのプロパティを使用してUIを構築します。

  4. これはMVPに関するものです。これは、あなたのビューとプレゼンターを切り離すために必要なことですが、主に単体テストをもっと簡単にするために必要です(これは、特にビューインターフェイスのものですが、プレゼンテーション用のものではありません。場合によっては、異なるプレゼンターで同じビューを使用することもできます。彼らはすべて同じインターフェイスを実装し、ビューはそれらに戻って話すことができます。

  5. ウィンドウ/タブの終了はどうですか?むしろ、定期的な自動保存、または明示的な保存ボタンを使用したいと思います。 を実装して、保存されていない変更があるときにユーザーに確認を促すようにします(メールの下書きが自動的に保存される前にナビゲートしようとすると、MS WordやLibreOffice-と同様に機能します)

+0

いつものように、あなたからの洞察力のある読書。 +1 –

+0

うわー! 2つの答え(ピーター、トーマス)2つの異なる説明。どうすればいいですか? Activities/PlacesはMVPの実装かどうか(私はあなたがそれがそうでないと言うことを知っています:)。だから両方のパターンを使用することはできますか? mobilewebappはこれの例です(どこで見つけることができますか?googleは成功しません)。あなたの5番目のポイントで、彼は彼が残しているビューからのデータを保存するようにユーザーに促すことを提案します。 –

+0

mobilewebappはGWT SDK 2.4-beta1にあり、GWTのSVNリポジトリにあります。私がステップ5で示唆しているのは、保存されていないデータがあるときに 'mayStop'から非null値を返すことです。 Activities&Placesは残りの部分を実行してユーザーにプロンプ​​トを表示し、最終的にナビゲーションをキャンセルします。 –

2
  1. Activity-Placeは、パターンの実装です。 GoogleはGoogle IOでgwt-mvpパターンを導入しましたが、それは約1年後にGWTの一部としてのみ実装されました。

  2. はいアクティビティにはビジネスロジックが含まれています。いいえ、ウィジェット/コントロールには通常ロジックが含まれていないため、ユーザーアクションに基づいてイベントが発生します。これらのイベントに作用するロジックは、ユーザーによって書き込まれ、他の場所に常駐します。

  3. 私はEclipseを使用していないので、Eclipseが生成するプレイスについてはわかりません。通常はカスタムの場所にカスタムフィールドとメソッドを含めることができます。たとえば、カスタムPlaceトークン引数を含むことができます。つまり、Placeトークンが "#place:id1"の場合、このPlaceを含むカスタムPlaceに含めることができます。

  4. Viewは、アクティビティを呼び出す/アクセスする必要があるときに、アクティビティが実装するPresenterを介して行います。たとえば、ユーザーがforのすべてのデータを入力してsubmitを押すと、Presenterにsubmit(formData)という名前のメソッドを含めることができます。

  5. activity.start(..)のデータの準備/読み込みは、通常のやり方です。特定のアクティビティが頻繁に使用される場合は、必要に応じてデータをキャッシュすることを検討することもできます。

+0

第4の回答に関して、ビュー内のコントロールに関連付けられたrpcサービスを持っている場合は、それを論理的に(パターンに従って)ClientFactoryに追加し、対応するプレゼンターでメソッドを宣言し実装しますアクティビティの中で見てそれを使用しますか?また、ビューなしのアクティビティ、またはその逆のアクティビティもあります。 –

+0

はい、どうすればrpcを使うのですか(私は通常GINを使用します)。アクティビティはユーザーの何かを表し、ビューがない場合、ユーザーはそれを行うことができませんでした。基本的にアクティビティアクションは、ビューを介してトリガされます。 –