2011-03-04 65 views
2

我學到的所有GWT/MVP示例看起來過於簡單,無法清楚地看到哪些最佳實踐與顯示和處理稍微複雜的模型對象有關。GWT&MVP - 顯示/編輯複雜對象的最佳實踐?

例如,大多數示例都像是一個演示者,它將點擊處理程序附加到視圖上的幾個文本框......如果單擊保存,則會調用演示者的save(),它只是獲取更新後的值,而我們MVP風格完成了。儘管如此,這並不太現實。

例如,假設我們有:

PresenterX - 獲得一個「樣板」對象,讓我們說有一個未知數量的各種原語或任何

ViewX 任何對象 - 要顯示的模型對象在表中,和/或允許它被編輯/重新保存

...這樣聽起來非常非常基本。但是,我們不知道模型對象中需要顯示的字段數量。這可能與動態數量的行/列有關。桌子可能沒有問題......但主持人應該如何將這個視角放到桌子上?作爲視圖理解的模型對象,或者將其分解成一堆列表......視圖基本上仍然需要理解。除非我們獲得模型對象(模型中的某些內容決定哪些字段可編輯,比如說),那麼某些字段可能是可編輯的,因此,誰應該負責確定哪些內容可編輯或不可編輯?可能是主持人,但我們如何反映MVP的觀點?

最後,假設視圖上有一個「保存」按鈕......誰的工作是找出表中所有已更改的行?

在我看來,視圖要麼需要更多地瞭解模型,要麼演示者需要更真正地理解視圖 - 這兩者都不是很好MVP :(......或者應該有一些中介對象。

我知道有這類東西(編輯/ RequestFactory等)的一些更好的/較新的有用的方法,但是我正在尋找上述scenarious建議。

回答

1

據我瞭解,MVP是MPV點的一條直線,因此P與兩者都相互作用,但是M和V只與P.相互作用。

另外,M的設計目標之一VP應該具有可測試的P和M,這意味着V必須可以用模擬版本替換。所以,V不應該公開任何依賴於實現的接口(例如HasClickHandlers而不是Button)。

現在,如果V應顯示泛型表,則應創建泛型方法:addColumn(..)定義列,addRow(..)添加數據。新的CellTable非常靈活,並支持動態添加列。

關於更改 - V應通知,P應採取行動。此外,還有新的Editors,恕我直言,它不適合MVP,但應該很容易使用。