2012-03-17 10 views
2

MVPパラダイムは、モデルとビューがプレゼンタを介して接続されていることを前提としていますが、CellTableではデフォルトでコンストラクタにtype引数が必要です。これは、CellTableをMVPに合わせることができないということですか?CellTableを使用したMVPアーキテクチャの実現

答えて

3

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

MVPはあなたのモデルに完全に無関係なビューではなく、特定のモデルクラスでのみ動作するビューをMVPで作成しても問題ありません。主なポイントは、発表者ができるだけ多くのモデル処理とイベント処理を維持することです。これにより、プレゼンターコードを効率的にユニットテストすることができます。ブラウザー環境(ウィジェットなど)が必要なものは、通常のユニットテスト(このようなコンポーネントは、非常にの遅い)でのみテストできます。

私は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; 
} 

これは私はそれが属するビューのビューロジック(カラム定義と、そのような)を維持することができます、そしてプレゼンターでデータモデルを扱います。

+0

'TransUnit'は' MyClass'を読み、 '@ Override'は' addTable'から省略しなければなりません。または私は何かを逃したか? –

+0

@MattWallisあなたはクラスについて正しいです。プレゼンターが(少なくともそれは私がいつもやったやり方である)ビューインターフェースを参照するので、プレゼンターでアクセスされているビュー内の何かには通常@オーバーライドがあります。ここに含める。 –

関連する問題