MVC模式 重新理解

2021-06-27 09:44:44 字數 2175 閱讀 5343

from 

mvc模式理解——當年給我乙個browser多好

以前一直無法舒坦的理解,mvc模式是怎樣實際應用到乙個程式上的。

這兩天因為工作google出一幅圖,然後恍然大悟。

圖1.

問題就出在以前所看過的文章上根本沒有提過browser這層。導致我無法正確理解view的責任、controller的責任,以及兩者明明是分層的,為什麼卻是迴圈依賴。

我將browser介入其中,重新思考mvc模式究竟如何部署到程式結構上。

圖2.

計算機前的使用者,只會和browser打交道,也就是整個應用程式的介面部署,各種視窗,包括選單、按鈕、子對話方塊等等。

我把整個介面部署的**,全部放置到browser模組下。此時無需model、view、controller,僅有browser的**,我們就可以給使用者顯示這個介面。

接下來我引入model模組,這個模組的**和視窗無關、和控制項無關、和hwnd無關。就是乙個後台執行的東西,不需要面向任何使用者。

model包含了業務的本質資料結構和邏輯流程。

然後我引入view模組,view模組**的責任就是,如何利用

browser

顯示model

的內容。

這個責任有兩個潛在意義:

1.browser模組的**不會去訪問model模組的內容,並顯示在browser相應的視窗上。

2.       在沒有controller的情況下——使用者不能操作程式介面上的任何選單、按鈕,只能看不能摸,view模組能夠在browser上給使用者顯示model的內容。

因此,view模組在mvc模式中所能做的就是:

1.       訪問model模組,獲取內容。

2.       訪問browser模組,修改視窗。

最後引入controller模組。

使用者在計算機前看著browser,瀏覽業務資料,他肯定會做一些操作,比如按下按鈕,選個選單或者其他什麼的。

使用者修改model模組的每乙個決定性操作,就對映在controller模組的乙個介面上。controller模組的責任是,代表使用者的每乙個動作,並分解為多個

view

做什麼,

model

做什麼的呼叫。這個動作必須有操作model或者view的**,不然這個動作放在browser模組下就可以了。

現在合起來分析個例子,使用者通過browser向model新增乙個任務。

按下確定按鈕後,browser讀取其他子視窗的輸入資料,當做引數傳遞給controller模組對應的呼叫。

l  controller模組不會主動的從browser中的控制項中讀取資料。如果使用者的動作足夠簡單,controller有可能就僅僅作為乙個中間層呼叫model模組。

controller模組將使用者的動作分解為一些更細緻的呼叫:

1.       讓model新增新任務。(不關心model怎麼做)

2.       從model中獲取新任務的資訊。

3.       將新任務的資訊傳遞給view,讓他在browser顯示出來。(不關心view怎麼做)

從controller的動作分解中可以看出:

l  和之前view直接訪問model獲取資料不一樣,這裡controller從model獲取資料,並交給view。僅由controller訪問model是有好處的,使得view和model沒有了耦合。

l  這裡有乙個微妙的迴圈依賴關係,browser依賴於controller,controller依賴於view,view又依賴於browser。

l  解開這一依賴的方法1,提取乙個view inte***ce,讓controller依賴於他,而不是依賴於view。提取controller inte***ce也是同理。

l  方法2,controller不依賴於view,讓view自己負責根據model的狀態改變顯示,即controller負責修改model,view負責讀取model。

l  不過,view和model之間通過controller傳遞資料是有好處的,除了耦合之外,另乙個關鍵的地方是,可以在controller中過濾資料,而不用修改model。

l  這兩個方法沒有最好,只有根據具體的情況選擇最合適的做法。在程式足夠小的情況下,其實是不需要把模組劃分得那麼清楚的。

o(∩_∩)o

OFBizChina 理解MVC模式

alleysh ofbizchina.com 最後更新日期 2003年6月21日 當涉及大量商業邏輯專案的時候,我們需要考慮什麼?如何分離使用者介面和後台操作?如何避免將商業邏輯混淆於一般的流程控制中?作為企業資訊系統,就需要考慮很多類似的問題。源源不斷的客戶新需求,要進行功能修改和擴充,但是因為程...

OFBizChina 理解MVC模式

alleysh ofbizchina.com 最後更新日期 2003年6月21日 當涉及大量商業邏輯專案的時候,我們需要考慮什麼?如何分離使用者介面和後台操作?如何避免將商業邏輯混淆於一般的流程控制中?作為企業資訊系統,就需要考慮很多類似的問題。源源不斷的客戶新需求,要進行功能修改和擴充,但是因為程...

對MVC模式的理解

mvc model view controller 1.檢視就是使用者看到的頁面,使用者通過頁面會向伺服器傳送一系列的請求。比如某購物 是mvc模型構建的,在買東西搜尋的時候,就會在搜尋框中輸入相應的資訊,然後提交搜尋。2.控制器,它就像乙個領導,頁面傳送的請求到達控制器時,這個領導他一般對這個請求...