2010-06-16 119 views
2

當我有一個按鈕只改變我的視圖中的某些內容(例如,如果我按下它時會出現一些文本),我可以使用我的視圖將其整個代碼寫入文件中,還是應該包含事件處理演示者中的這個按鈕?這對我來說是個問題,因爲我不知道,如果演示者處理來自視圖的所有事件或僅處理這些事件,這會改變模型中的某些內容?mvp設計模式 - 問題

在此先感謝

回答

2

演示僅處理該改變模型的事件。然而,每個程序員自己決定應該放在什麼樣的模型上,以及完全屬於哪個視圖

想象一下你需要製作2個按鈕的任務,第一個按鈕從數據庫加載數據並顯示它,第二個按鈕更改頁面的顏色爲一些隨機值,有兩種實現方法:

  1. 車型將擁有LoadedData loadedDataColor color。演示者將以這種方式管理這兩個按鈕。
  2. 可以確定顏色是演示部分的一部分,並且與模型無關。這樣 - 模型中就沒有顏色了,所有隨機顏色生成和按鈕甚至處理都會出現在視圖中。

因此,總結一下,如果您想/需要/決定將該文本放入模型中 - 演示者可以並且應該管理該按鈕。但是,如果該文本與主邏輯無關並且是演示文稿的一部分(某些設計元素),則不應將其放入模型中,也不應由演示者進行管理。

0

我認爲這取決於你感覺舒適。 就個人而言,我更喜歡被動視圖的實現,但如果我沒有做到, 被動視圖和監督控制器都會規定視圖 應該由演示者進行更新(除了在監督控制器的情況下簡單數據綁定的情況 ) 。 另一個例外可能是如果你的視圖是一個Web窗體,你想通過JavaScript更新它的客戶端。

你可以看看下面的例子:

http://msdn.microsoft.com/en-us/library/ff647543.aspx

在這裏你可以找到段落:查看更新

「當更新模型,視圖也必須更新,以反映更改視圖更新可以通過多種方式處理Model-View-Presenter變體Passive View和監督控制器指定實現視圖更新的不同方法

在被動視圖中,演示者更新視圖以反映模型中的更改。與模型的交互僅由演示者處理;該視圖不知道模型中的更改。

在監督控制器中,視圖直接與模型進行交互以執行簡單的數據綁定,可以聲明方式定義簡單的數據綁定,無需演示者介入。演示者更新模型;它僅在無法聲明性地指定複雜UI邏輯的情況下操縱視圖的狀態。複雜的UI邏輯的例子可能包括改變控制的顏色或動態地隱藏/顯示控制。」

希望它是有幫助的

利瑪