2
MVP範例假定模型和視圖通過演示者連接,但默認情況下,CellTable在其構造函數中需要類型參數。那麼這是否意味着CellTable不能適合MVP?使用CellTable實現MVP體系結構
MVP範例假定模型和視圖通過演示者連接,但默認情況下,CellTable在其構造函數中需要類型參數。那麼這是否意味着CellTable不能適合MVP?使用CellTable實現MVP體系結構
我已經在MVP中成功使用了CellTable。關鍵是要了解這個架構的目的。
MVP並不是關於您的模型完全不可知的視圖,在MVP中,視圖只適用於您的特定模型類是很好的。主要觀點是在演示者中儘可能多地保持模型處理和事件處理。這使得演示者代碼可以高效地進行單元測試。任何需要瀏覽器環境的東西(例如小工具)都應該放在視圖中,它不會干擾正常的單元測試(這些組件只能用GwtTestCase進行測試,這很慢,因爲它的速度很慢)。
我有一個View接口方法來創建表,它作爲HasData返回。在演示者綁定方法中,我調用此方法獲取表,實例化表的數據提供者,並使用任何更新的數據操作演示者中的數據提供者。
//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;
}
這使我保持在它所屬的視圖的視圖邏輯(列定義和這樣),以及處理在演示者的數據模型。
如果'TransUnit'讀取'MyClass',並且'@ Override'從'addTable'中省略,因爲我們看不到足夠的'class MyView'來查看它爲什麼在那裏?或者我錯過了什麼? – 2014-08-28 11:49:08
@MattWallis你是對的類。通常會在視圖中的任何內容中使用'@ Override',因爲演示者將引用一個視圖界面(至少這是我一直這樣做的),所以我認爲這是有意義的包括在這裏。 – 2015-01-19 07:43:12