我明白爲什麼Model-View-Presenter模式是一個好模式的一般原因。它分離了關注點,以便處理向用戶呈現信息的代碼的相同部分不用擔心計算等。我的問題是爲什麼我們需要一個基本上什麼都不做的視圖?所有的觀點都是告訴主持人做工作並從主持人那裏得到結果。例如,在我的C#視圖中,我經常會有一大堆事件處理程序調用在演示者中實現的委託。爲什麼不把觀點和主持人結合起來?沒有關切是真的分開,因爲這個觀點沒有任何顧慮。模型 - 視圖 - 演示者模式中「視圖」的用途是什麼?
回答
你的觀點應該只是一種從用戶獲取數據的方式。任何與該功能沒有特別關聯的東西都應該推入Presenter(如果需要的話,可以是模型)。演示者處理視圖獲得的內容,但不應該關注一旦獲取視圖就會發生什麼。
演示者試圖以更語義的方式查看您的「UI」。您的視圖上可能有2個文本框,但您的演示者會看到名稱和姓氏。這個想法應該是,用最少量的保險絲,您可以將視圖關閉並彈出另一個視圖。
我不知道我對此有多認同,並傾向於選擇MVVM,因爲您沒有演示者,相反,您有ViewModel,我覺得這是更好的方式來定義上述抽象。
這很有道理。我認爲我之所以沒有真正理解的部分原因是因爲在Visual Studio中的C#中,顯示文本框等的代碼是隱藏的,你並沒有真正看到它。事實並非如此,該觀點不會做任何事情。視圖所做的工作代碼,顯示所有UI控件等,只是保存在另一個文件中,而您並不真正看。 – Daniel
兩個重要的優點
我們可以寫多個視圖或容易地更換次(例如的WinForms => WPF實現)
我們通過創建測試視圖增加可測試性單元測試
現在你提到它,我確實爲單元測試創建了測試視圖。有趣的是,我從來沒有想過這件事。 – Daniel
- 1. 模型 - 視圖 - 演示者模式中的演示者是否應處理視圖上的多個「UI」元素?
- 2. 模型 - 視圖 - 演示者:驗證UI
- 3. 模型視圖演示者和複合視圖
- 4. 模型,視圖,視圖模型和演示器
- 5. 視圖模型定位器的用途是什麼?
- 6. iOS中的模型,視圖和演示者的不同框架?
- 7. 關於模型 - 視圖 - 演示者(C#)的一般問題,模型是否應該知道演示者?
- 8. 模型 - 視圖 - 使用虛擬網格的演示者
- 9. 在演示者,GWT模型視圖演示者之間傳遞控件/值?
- 10. ASP.NET Web窗體 - 模型視圖演示者和用戶控件
- 11. TDD模型視圖演示者使用MOQ
- 12. 模型視圖演示和Repeater
- 13. 模型視圖演示者 - 處理更復雜的UI控件
- 14. 模型視圖演示者,如何在視圖之間傳遞實體?
- 15. SQL中視圖的用途是什麼?
- 16. 在模型視圖中使用演示者中的工廠模型視圖演示者和域驅動設計項目
- 17. 模型視圖演示者事件和問題分離
- 18. Mediator和Proxy在模型視圖控制器模式中扮演什麼角色
- 19. 什麼是從多個視圖模型
- 20. 模型 - 視圖 - 控制器(MVC)優於模型 - 視圖的優點是什麼?
- 21. 什麼是模態視圖?
- 22. 模型視圖控制器與模型查看演示文稿
- 23. iPad:以模型視圖顯示視圖
- 24. 模型視圖演示者與AA和改造,而不是獲取數據
- 25. 使用視圖模型的ASP.net MVC演示項目
- 26. knockout.js刪除嵌套視圖模型視圖模型,並在主視圖模型
- 27. 如何在MVP中爲抽象模型創建視圖和演示者
- 28. OpenERP 6中'圖表'視圖的用途是什麼?
- 29. 爲什麼視圖模型不MVVM
- 30. WPF:清爽的使用模型視圖視圖模型
你爲你的代碼編寫單元測試嗎? –
我不認爲單元測試應該是我們對那些試圖理解MVx的人的抨擊。整個想法是以更合理的方式打破你的應用程序,其中組成是一個功能,而不是事後的想法。輕鬆進行單元測試的能力是這個的一個副產品。 – deanvmc
@deanmvc同意,爲控制器編寫單元測試還是我不把控制器邏輯和視圖結合起來最明顯的方法。 –