2011-08-30 157 views
3

我明白爲什麼Model-View-Presenter模式是一個好模式的一般原因。它分離了關注點,以便處理向用戶呈現信息的代碼的相同部分不用擔心計算等。我的問題是爲什麼我們需要一個基本上什麼都不做的視圖?所有的觀點都是告訴主持人做工作並從主持人那裏得到結果。例如,在我的C#視圖中,我經常會有一大堆事件處理程序調用在演示者中實現的委託。爲什麼不把觀點和主持人結合起來?沒有關切是真的分開,因爲這個觀點沒有任何顧慮。模型 - 視圖 - 演示者模式中「視圖」的用途是什麼?

+0

你爲你的代碼編寫單元測試嗎? –

+0

我不認爲單元測試應該是我們對那些試圖理解MVx的人的抨擊。整個想法是以更合理的方式打破你的應用程序,其中組成是一個功能,而不是事後的想法。輕鬆進行單元測試的能力是這個的一個副產品。 – deanvmc

+0

@deanmvc同意,爲控制器編寫單元測試還是我不把控制器邏輯和視圖結合起來最明顯的方法。 –

回答

3

你的觀點應該只是一種從用戶獲取數據的方式。任何與該功能沒有特別關聯的東西都應該推入Presenter(如果需要的話,可以是模型)。演示者處理視圖獲得的內容,但不應該關注一旦獲取視圖就會發生什麼。

演示者試圖以更語義的方式查看您的「UI」。您的視圖上可能有2個文本框,但您的演示者會看到名稱和姓氏。這個想法應該是,用最少量的保險絲,您可以將視圖關閉並彈出另一個視圖。

我不知道我對此有多認同,並傾向於選擇MVVM,因爲您沒有演示者,相反,您有ViewModel,我覺得這是更好的方式來定義上述抽象。

+0

這很有道理。我認爲我之所以沒有真正理解的部分原因是因爲在Visual Studio中的C#中,顯示文本框等的代碼是隱藏的,你並沒有真正看到它。事實並非如此,該觀點不會做任何事情。視圖所做的工作代碼,顯示所有UI控件等,只是保存在另一個文件中,而您並不真正看。 – Daniel

5

兩個重要的優點

  • 我們可以寫多個視圖或容易地更換次(例如的WinForms => WPF實現)

  • 我們通過創建測試視圖增加可測試性單元測試

+0

現在你提到它,我確實爲單元測試創​​建了測試視圖。有趣的是,我從來沒有想過這件事。 – Daniel

相關問題