同時通過大學和以下的SO發展下去,我已經聽說了很多有關模型 - 視圖 - 控制器的架構設計模式。甚至在我知道它是什麼之前,我無意中使用了MVC模式,並且仍然在我的日常工作中使用它。從我所看到的,這可能是今天使用的最流行的模式。但是,我沒有聽說過很多,但是可以使用替代模式來代替MVC。那裏有什麼選擇,並且你會決定通過MVC使用它們的原因是什麼?我也有興趣瞭解他們典型的系統類型。最後,使用它們的優點和缺點是什麼?模型 - 視圖 - 控制器有什麼替代方案?
回答
- 被動視圖 - http://martinfowler.com/eaaDev/PassiveScreen.html
- 監督控制器 - http://martinfowler.com/eaaDev/SupervisingPresenter.html
- 模型 - 視圖 - 演示 - http://martinfowler.com/eaaDev/ModelViewPresenter.html
我個人最喜歡的是被動視圖。比其他人更容易測試,包括MVC。
我偶爾看到沒有C的MVC,其中視圖監聽模型數據的變化並相應地改變渲染,以及模型中的方法綁定到視圖的事件處理程序。
對於需要視圖與數據緊密結合的項目(例如何時存在與模型或模型的屬性直接相關的可視化組件),這可能相當有用,因爲它會刪除「中間人「。
我想很多人會認爲,雖然,這仍然是MVC,只是一個雜交的版本,並且該視圖和模型之間建立的綁定是控制器邏輯。
嗯,有模型 - 視圖 - 演示,但我認爲你會發現,最常見的「另類」到MVC是真正缺乏適當的分離。作爲一個極端的例子,考慮傳統的ASP頁面,HTML,VBScript和SQL可以在同一個文件中並排找到。 (這不是ASP的慶典 - 你會發現很多這樣的例子在其他語言。)
雖然上面的答案是十分正確的,我認爲這是更重要的是要注意的是,單詞「設計模式」是完全所有創建軟件的人中有90%未知。他們剛開始編寫代碼。
的挑戰不是選擇最好的設計方法,它令人信服的其他人設計的具有價值。
可以與目前的ASP.NET框架滾你自己的MVC,仍然保持回發模型。
http://www.codeproject.com/KB/aspnet/RollingYourOwnMVCwithASP.aspx
的表示 - 抽象控制(PAC)家族的圖案,其中,接口/交互由代理層次處理。
維基百科的文章是不是很大 http://en.m.wikipedia.org/wiki/Presentation-abstraction-control
在Lift Web框架,我們使用一個View First方法。基本上,視圖由一個或多個片段組成(與控制器有點類似),片段可以嵌套。這對於HTML和Scala內置的XML處理功能非常有效。
其他一些架構模式,包括MVC。
分層系統
TCP/IP
面向對象的組織
模型 - 視圖 - 控制器,表示 - 抽象 - 控制,模型視圖演示者和模型視圖ViewModel。
示例將是ASP.NET的MVC,Ruby on Rails以及其他一些示例。
基於事件,隱式調用
瀏覽器環境(DOM)
管道和濾波器架構
UNIX管道
庫
表依循Garlan由肖&軟件體系結構的驅動口譯
您也可以找到this paper一個不錯的讀取。
另一個值得注意的鏈接是關於架構模式的文章Wikipedia。
現在它已經很老了。我想提一個多(在更多的知識信息的利息)爲PresenterFirst patrern
這裏是在同一個信息:
http://en.wikipedia.org/wiki/Presenter_First
http://www.atomicobject.com/pages/Presenter+First
HTH
Observer模式呢。如果我沒有弄錯,MVC是在Smalltalk中引入的,然後出現了一些發佈/訂閱模式。
觀察者模式(發佈/訂閱模式的子集)是一種軟件設計模式,其中稱爲主題的對象維護其依賴項列表(稱爲觀察者),並自動通知它們任何狀態更改,通常通過調用他們的一種方法。它主要用於實現分佈式事件處理系統。例如:
例如:只有當有數據要保存時,保存按鈕才能在編輯器中啓用。觀察者模式的另一個示例是MFC中的Document View體系結構,其中在文檔更改時視圖會更新。
- 1. Orchard中的控制器操作視圖的替代方案
- 2. 控制器方法的替代方案
- 3. 模型視圖控制器中的模型視圖控制器
- 4. 模型視圖控制器
- 5. 模型 - 視圖 - 控制器(MVC)優於模型 - 視圖的優點是什麼?
- 6. 什麼是MVC的替代方案?
- 7. CSharpOptParse還有什麼替代方案?
- 8. InstallShield有什麼好的替代方案?
- 9. 論壇有什麼替代方案?
- 10. IRB有什麼替代方案?
- 11. pinax有什麼替代方案?
- 12. SWT TabFolder有什麼替代方案?
- 13. 什麼是流量控制例外的替代方案?
- 14. MVC:爲什麼模型,視圖和控制器的分離?
- 15. 模型視圖控制器 - 誰做什麼?
- 16. ASP.NET視圖模型替代
- 17. Yii什麼是「控制器視圖」?
- 18. 模型與視圖控制器進行通信的建議方式是什麼?
- 19. 什麼是一些pagerank替代方案?
- 20. MATLAB編輯器有什麼替代方案?
- 21. TTWebController的問題... UIWebView的替代視圖控制器模板?
- 22. 什麼是iFrame的替代方案?
- 23. 瞭解模型 - 視圖 - 控制器
- 24. Android中的模型視圖控制器
- 25. GWT模型視圖控制器
- 26. 模型 - 視圖 - 控制器和Java
- 27. (模型/視圖/控制器)MVC
- 28. 模型,視圖,控制器混亂
- 29. 辭退模型 - 視圖 - 控制器
- 30. PHP視圖 - 控制器類模型
還有Model-View-ViewModel(-Controller),它在.NET空間中越來越受歡迎。您可以創建一個ViewModel(通常在Controller中)傳遞給View以減少View對Model的實現細節的依賴。這是我目前最喜歡的。 – 2009-09-11 08:01:17
是不是被動查看(幾乎)所有Web框架實現?我無法想象任何構建在模型的AJAX輪詢中的「我的頭頂」的框架「通知」視圖。被動視圖和三層之間有什麼區別? – 2010-05-28 17:11:04