mvc即model(模型)、view(檢視)、controller(控制器)。
它是乙個設計模式,強制性的將應用程式的輸入、處理和輸出分開,是xerox parc在八十年代為程式語言smalltalk-80發明的一種軟體設計模式,至今已被廣泛使用。最近幾年被推薦為sun公司j2ee平台的設計模式(接下來有可能會總結學習)。
很多程式設計師傾向於將軟體的業務邏輯放在controller裡,將資料庫訪問操作的**放在model裡。所以一般來說其**結構,是「view層是介面,controller層是業務邏輯,model層是資料庫訪問」,這個對不對呢?(可直接請看最底內容。)
mvc要實現的目標是將軟體使用者介面和業務邏輯分離以使**可擴充套件性、可復用性、可維護性、靈活性加強。
(1)檢視
view層是使用者看到並與之互動的介面(它可以包括一些可以顯示資料資訊的頁面,或者展示形式。例如jsp,html,asp,php)。
對老式的web應用程式來說,檢視就是由html元素組成的介面,在新式的web應用程式中,也包括一些新的技術,如:macromedia flash和xhtml,xml/xsl,wml等一些標識語言和web services.
mvc乙個大的好處是它能為你的應用程式處理很多不同的檢視。在檢視中其實沒有真正的處理發生,作為檢視來講,它只是作為一種輸出資料並允許使用者操縱的方式。
(2)模型
model層表示業務邏輯(可以說就是後端介面,用於業務處理)。在mvc的三個部件中,模型擁有最多的處理任務。模型的**只需寫一次就可以被多個檢視重用,所以減少了**的重複性。
(3)控制器
controller層用來排程view層 和 model層,將使用者介面和業務邏輯合理的組織在一起,起粘合劑的效果。所以controller中的內容能少則少,這樣才能提供最大的靈活性。
所以當單擊web頁面中的超連結和傳送html表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定呼叫哪個模型構件去處理請求,然後用確定用哪個檢視來顯示模型處理返回的資料。
控制器的作用就是這麼簡單, 用來將不同的view和不同的model組織在一起,順便替雙方傳遞訊息,僅此而已。
現在我們總結mvc的處理過程,首先控制器接收使用者的請求,並決定應該呼叫哪個模型來進行處理,然後模型用業務邏輯來處理使用者的請求並返回資料,最後控制器用相應的檢視格式化模型返回的資料,並通過表示層呈現給使用者。所以:編寫**要相對「薄controller,厚model」。而 view和controller的關係是一對多。知其然,並且也知其所以然。少用繼承,多有組合
在實際建立中,各model之間是可以相互呼叫的, controller也可以無障礙的呼叫model。
而controller之間是不可以相互呼叫的,要復用**只能將**提公升至父類,通過繼承實現,顯然這種做法既不正確,也不靈活,因此完全不提倡。
mvc是一種模式,但卻在gof總結出來的這個23個設計模式之外,確切的說它不是多種設計模式的組合,並不僅僅只是乙個單獨的乙個模式。
組成mvc的三個模式分別是組合模式、策咯模式、觀察者模式
。 注意,以下內容以這三個設計模式的知識為基礎,如果對這三個設計模式沒概念,或許會閱讀困難。
(1)組合模式
組合模式只在檢視層活動, 檢視層的實現用的就是組合模式,當然,這裡指的實現是底層的實現,是由程式設計框架廠商做的事情,用不著普通程式設計師插手。
組合模式的類層次結構是樹狀的, 而我們做web時檢視層是html頁面,html的結構正是樹狀,這其實就是乙個組合模式的應用。
組合模式就是從介面設計的通用解決方案總提煉出來的,只要涉及到使用者介面,組合模式就必定存。
(2)觀察者模式
觀察者模式有兩部分組成,「被觀察的物件」 和 「觀察者」,觀察者也被稱為監聽者。
對應到mvc中,model是被觀察的物件,view是觀察者,model層一旦發生變化,view層即被通知更新。view層和model層互相之間是持有引用的。 我們在開發web mvc程式時,因為檢視層的html和model層的業務邏輯之間隔了乙個http,所以不能顯示的進行關聯,但是他們觀察者和收聽者的關係卻沒有改變。
當view通過http提交資料給伺服器,伺服器上的model接受到資料執行某些操作,再通過http響應將結果回送給view,view(瀏覽器)接受到資料更新介面,這正是乙個接受到通知並執行更新的行為,是觀察者模式的另一種表現形式。
(3)策略模式
策略模式是view和controller之間的關係,controller是view的乙個策略,controller對於view是可替換的, 在實際的開發場景中,也經常會碰到乙個view被多個controller引用,這即使策咯模式的一種體現。
總結一下,關於mvc各層之間關係所對應的設計模式:所以針對業務邏輯應該放在controller還是model的問題,從設計模式的角度講,策略模式中的策略通常都很小很薄,不會包含太多的內容,controller是乙個策略, 自然不應該在裡面放置過多的內容,否則要替換乙個新的會相當麻煩,與此同時也會破壞view-model的觀察者模式,彷彿view-controller之間即實現了策略模式又實現了觀察者模式,這種混亂是罪惡的根源,是製造焦油坑讓程式設計師陷入其中無法自拔的罪魁禍首。切忌,應當避免。view層,單獨實現了組合模式;
model層和view層,實現了觀察者模式;
view層和controller層,實現了策咯模式。
mvc就是將這三個設計模式在一起用了。
MVC學習筆記1 MVC的理解
我對mvc的理解 1.mvc更像傳統的三層 多層架構中的ui層 2.ui層又進行細分,分為m v c,3.其中view和controller層都是為了和客戶端進行互動,model對view輸入的有效性驗證。如,使用者傳送乙個請求,ip controller action,controller接收到請...
MVC系統學習1 MVC執行流程
用mvc來做開發也有一段時間了,但是感覺一直沒入門,就徘徊在似懂非懂的層次,和去年剛畢業學習webform時一樣,當時通過張子陽老兄的幾篇文章,明白了請求處理流程,頁面生命週期才真正明白了webform的強大。由於mvc的學習資料比較少,牛人的技術部落格也只是講一些基礎的而已。因此決定通過asp.n...
MVC系統學習1 MVC執行流程
用mvc來做開發也有一段時間了,但是感覺一直沒入門,就徘徊在似懂非懂的層次,和去年剛畢業學習webform時一樣,當時通過張子陽老兄的幾篇文章,明白了請求處理流程,頁面生命週期才真正明白了webform的強大。由於mvc的學習資料比較少,牛人的技術部落格也只是講一些基礎的而已。因此決定通過asp.n...