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.控制器,它就像乙個領導,頁面傳送的請求到達控制器時,這個領導他一般對這個請求...