34

同時通過大學和以下的SO發展下去,我已經聽說了很多有關模型 - 視圖 - 控制器的架構設計模式。甚至在我知道它是什麼之前,我無意中使用了MVC模式,並且仍然在我的日常工作中使用它。從我所看到的,這可能是今天使用的最流行的模式。但是,我沒有聽說過很多,但是可以使用替代模式來代替MVC。那裏有什麼選擇,並且你會決定通過MVC使用它們的原因是什麼?我也有興趣瞭解他們典型的系統類型。最後,使用它們的優點和缺點是什麼?模型 - 視圖 - 控制器有什麼替代方案?

回答

27
  1. 被動視圖 - http://martinfowler.com/eaaDev/PassiveScreen.html
  2. 監督控制器 - http://martinfowler.com/eaaDev/SupervisingPresenter.html
  3. 模型 - 視圖 - 演示 - http://martinfowler.com/eaaDev/ModelViewPresenter.html

我個人最喜歡的是被動視圖。比其他人更容易測試,包括MVC。

+1

還有Model-View-ViewModel(-Controller),它在.NET空間中越來越受歡迎。您可以創建一個ViewModel(通常在Controller中)傳遞給View以減少View對Model的實現細節的依賴。這是我目前最喜歡的。 – 2009-09-11 08:01:17

+1

是不是被動查看(幾乎)所有Web框架實現?我無法想象任何構建在模型的AJAX輪詢中的「我的頭頂」的框架「通知」視圖。被動視圖和三層之間有什麼區別? – 2010-05-28 17:11:04

4

我偶爾看到沒有C的MVC,其中視圖監聽模型數據的變化並相應地改變渲染,以及模型中的方法綁定到視圖的事件處理程序。

對於需要視圖與數據緊密結合的項目(例如何時存在與模型或模型的屬性直接相關的可視化組件),這可能相當有用,因爲它會刪除「中間人「。

我想很多人會認爲,雖然,這仍然是MVC,只是一個雜交的版本,並且該視圖和模型之間建立的綁定是控制器邏輯。

4

嗯,有模型 - 視圖 - 演示,但我認爲你會發現,最常見的「另類」到MVC是真正缺乏適當的分離。作爲一個極端的例子,考慮傳統的ASP頁面,HTML,VBScript和SQL可以在同一個文件中並排找到。 (這不是ASP的慶典 - 你會發現很多這樣的例子在其他語言。)

4

雖然上面的答案是十分正確的,我認爲這是更重要的是要注意的是,單詞「設計模式」是完全所有創建軟件的人中有90%未知。他們剛開始編寫代碼。

的挑戰不是選擇最好的設計方法,它令人信服的其他人設計的具有價值。

1

Lift Web框架,我們使用一個View First方法。基本上,視圖由一個或多個片段組成(與控制器有點類似),片段可以嵌套。這對於HTML和Scala內置的XML處理功能非常有效。

5

其他一些架構模式,包括MVC。

分層系統

TCP/IP

面向對象的組織

模型 - 視圖 - 控制器表示 - 抽象 - 控制模型視圖演示者模型視圖ViewModel

示例將是ASP.NET的MVC,Ruby on Rails以及其他一些示例。

基於事件,隱式調用

瀏覽器環境(DOM)

管道和濾波器架構

UNIX管道

表依循Garlan由肖&軟件體系結構的驅動口譯


您也可以找到this paper一個不錯的讀取。

另一個值得注意的鏈接是關於架構模式的文章Wikipedia

0

Observer模式呢。如果我沒有弄錯,MVC是在Smalltalk中引入的,然後出現了一些發佈/訂閱模式。

觀察者模式(發佈/訂閱模式的子集)是一種軟件設計模式,其中稱爲主題的對象維護其依賴項列表(稱爲觀察者),並自動通知它們任何狀態更改,通常通過調用他們的一種方法。它主要用於實現分佈式事件處理系統。例如:

例如:只有當有數據要保存時,保存按鈕才能在編輯器中啓用。觀察者模式的另一個示例是MFC中的Document View體系結構,其中在文檔更改時視圖會更新。