2

MVP パラダイムは、モデルとビューがプレゼンターを介して接続されていることを前提としていますが、CellTable はデフォルトでコンストラクターに型引数を必要とします。これは、MVP に合わせて CellTable を作成できないということですか?

4

1 に答える 1

3

MVP で CellTable を使用することに成功しました。重要なのは、このアーキテクチャの目的を理解することです。

MVP は、ビューがモデルに完全に依存しないということではありません。MVP の下では、特定のモデル クラスでのみ機能するビューを持つことは問題ありません。要点は、モデルの処理とイベントの処理を可能な限りプレゼンターに保持することです。これにより、プレゼンター コードを効率的に単体テストできます。ブラウザ環境を必要とするもの (ウィジェットなど) はすべてビュー内にある必要があり、通常の単体テストを妨げません (このようなコンポーネントは、非常に遅い GwtTestCase でのみテストできます)。

HasData として返されるテーブルを作成するための View インターフェイス メソッドがあります。プレゼンター バインド メソッドでは、このメソッドを呼び出してテーブルを取得し、テーブルのデータ プロバイダーをインスタンス化し、更新されたデータを使用してプレゼンターでデータ プロバイダーを操作します。

//MyPresenter.java
HasData<MyClass> table = display.addTable();
ListDataProvider<MyClass> dataProvider = new ListDataProvider<MyClass>();
dataProvider.addDataDisplay(table);

//assumes results is a collection of MyClass to display.
//use for loop if you need to do some manipulation to get the objects in
dataProvider.getList().addAll(results);


//MyView.java
@Override // since this implements the definition from the view interface
public HasData<MyClass> addTable()
{
    CellTable<MyClass> table = buildTable(); //boiler-plate table building code in this method
    myPanel.add(table);
    return table;
}

これにより、ビュー ロジック (列定義など) をそれが属するビューに保持し、プレゼンターでデータ モデルを処理できます。

于 2012-04-03T07:55:45.177 に答える