2011-05-11 15 views

回答

26

他們都是。

MVC是一種模糊的模式。

我對MVC的觀點是:

控制器

對象具有的模型的集合,具有用於查看和編輯模型的方法。它與模型交談並返回視圖的實例以及應用於其上的模型。

查看

連接到它的模型的定義,僅僅是一組功能來顯示一個特定的模式。

型號

封裝數據。具有返回狀態和更改狀態的方法。

//Controller 
import Views 

class Controller 
    private Models 

//View 
import Model 

class View 

//Model 
class Model 

模型不需要知道任何關於視圖/控制器。視圖需要知道模型的定義。一個控制器需要擁有模型和需要知道視圖的定義。

你可以更緊密地耦合它們,這是可選的。

+0

我擔心這可能是這種情況!我同意你的文字定義。 – Marcus 2011-05-11 15:45:18

+4

在downvote,想證明這一點? – Raynos 2011-05-14 22:37:12

4

實際上有一個小的差異。

模型有兩種類型:主動模型和被動模型:第一種模型有通知機制,第二種模型不知道在MVC中使用。

第一個和第四個圖表示使用主動模型的MVC。

更多關於它,你可以閱讀here

1

他們都不是其實是錯誤的,但基於MVC和客戶端的MVC的Web(請求/響應)不同的方法。

在Web環境中的控制器是負責與用戶請求處理,修改所述模型(如果適用),找到正確的視圖,分配該模型信息,該視圖並將其返回給用戶。

在原始MVC模式(說話桌面應用程序)的模型直接更新視圖,每當它改變,並且與用戶輸入和應用邏輯的控制器處理相應地更新模型的更直接的解釋。但是,這對於普通的Web應用程序來說不起作用,因爲HTTP是無狀態的,並且沒有使用任何其他更新的技術(如評論中提到的長輪詢Ajax或websockets),服務器無法真正地通知客戶端模型中的更改。

+1

模型應該直接更新視圖!只需在模型和視圖之間放置一個透明的websocket橋樑 – Raynos 2011-05-11 15:55:58

+0

只是在發佈您的評論時更新我的​​答案......問題是大多數聲稱實現MVC的已建立的Web框架僅支持普通HTTP。 – Daff 2011-05-11 16:02:16

+0

彗星在所有MVC框架上都很容易實現。這只是不常見的知識。如果服務器的標準化,但服務器推送也很簡單,但實現起來不太容易。 – Raynos 2011-05-11 16:03:00

2

圖1和圖4是正確的MVC模式。其餘的更接近MVP模式。

雖然在Web MVC你有被動型和變化由查看從型號拉,而不是由模型(Observer模式)被推。

+0

你可以對MV _P_做一個粗略的概述嗎? – Raynos 2011-05-11 16:10:33

+0

This SO topic should clear it up for you:http://stackoverflow.com/questions/4751633/clarification-mvc-mvp-mvvm – 2011-05-11 16:13:17

+0

這並不能解釋演示者是什麼。 – Raynos 2011-05-11 16:14:46

7

嚴格來說,MVC是一種過時的模式。粗粒度來講,它引入了視圖和模型之間的依賴關係,因爲模型更新查看狀態直接 (http://www.mimuw.edu.pl/~sl/teaching/00_01/Delfin_EC/Overviews/MVC.htm),如顯示在圖4,在那裏你看到Model和View之間的直接互動,根據MVC原來,歷史提法,這是不可取的。事實上,今天我們已經修改了MVC的版本,有時我們會描述MVP並將其稱爲MVC。首字母縮略詞「MVC」的使用非常自由,以至於任何有三個元素的模型,視圖和控制器基本都是MVC,儘管有詳細的實施細節和職責定義。 MVC和MVP之間的區別非常微妙,當您描述它們時,它們駐留在View和Presenter(Controller)職責的定義中。實際上,Martin Fowler在幾年前給了MVP(和MVC)他的告別牌(http://www.martinfowler.com/eaaDev/ModelViewPresenter.html),我們可以從他的角色中找到稱爲Presentation Model(見http://martinfowler.com/eaaDev/PresentationModel.html)或PM的「新」模式的定義。微軟已經爲其WPF和Silverlight技術定義了另一種模式,稱爲Model-View-View-Presenter或MVVM(參見http://msdn.microsoft.com/en-us/magazine/dd419663.aspx),其中有Presentation Model作爲他的靈感。我想你可以看看所有這些傢伙,並且知道他們有多相似(不同)。在我看來,基本思想是Presentation數據和行爲保持在Presenter中,Model不知道View(所以圖4關閉,甚至是MVC),你應該能夠改變View(或者支持不同的View實施)以無痛的方式與Presenter和Model解耦。演示模型可以提供這一點,並且使用當前技術實現並且有效而徹底。

1

圖2,圖3和圖5對於MVC是準確的。向控制器發送請求時,它使用模型執行操作,然後迴應。

相關問題