MVC模式簡介

MVC簡介 html

MVC的全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,是一種軟件設計典範。它是用一種業務邏輯、數據與界面顯示分離的方法來組織代碼,將衆多的業務邏輯彙集到一個部件裏面,在須要改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯,達到減小編碼的時間。 前端

MVC開始是存在於桌面程序中的,M是指業務模型,V是指用戶界面,C則是控制器java

使用的MVC的目的:在於將M和V的實現代碼分離,從而使同一個程序可使用不一樣的表現形式。好比Windows系統資源管理器文件夾內容的顯示方式,下面兩張圖中左邊爲詳細信息顯示方式,右邊爲中等圖標顯示方式,文件的內容並無改變,改變的是顯示的方式。無論用戶使用何種類型的顯示方式,文件的內容並無改變,達到M和V分離的目的。 程序員

在網頁當中, web

V即View視圖是指用戶看到並與之交互的界面。好比由html元素組成的網頁界面,或者軟件的客戶端界面。MVC的好處之一在於它能爲應用程序處理不少不一樣的視圖。在視圖中其實沒有真正的處理髮生,它只是做爲一種輸出數據並容許用戶操縱的方式。 數據庫

M即model模型是指模型表示業務規則。在MVC的三個部件中,模型擁有最多的處理任務。被模型返回的數據是中立的,模型與數據格式無關,這樣一個模型能爲多個視圖提供數據,因爲應用於模型的代碼只需寫一次就能夠被多個視圖重用,因此減小了代碼的重複性。 編程

C即controller控制器是指控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求,控制器自己不輸出任何東西和作任何處理。它只是接收請求並決定調用哪一個模型構件去處理請求,而後再肯定用哪一個視圖來顯示返回的數據。 設計模式

下圖說明了三者之間的調用關係。 數組

用戶首先在界面中進行人機交互,而後請求發送到控制器,控制器根據請求類型和請求的指令發送到相應的模型,模型能夠與數據庫進行交互,進行增刪改查操做,完成以後,根據業務的邏輯選擇相應的視圖進行顯示,此時用戶得到這次交互的反饋信息,用戶能夠進行下一步交互,如此循環。 瀏覽器

MVC舉例一:

最典型的MVC就是jsp+servlet+javabean模式。

JavaBean做爲模型,既能夠做爲數據模型來封裝業務數據,又能夠做爲業務邏輯模型來包含應用的業務操做。其中,數據模型用來存儲或傳遞業務數據,而業務邏輯模型接收到控制器傳過來的模型更新請求後,執行特定的業務邏輯處理,而後返回相應的執行結果。

JSP做爲表現層,負責提供頁面爲用戶展現數據,提供相應的表單(Form)來用於用戶的請求,並在適當的時候(點擊按鈕)向控制器發出請求來請求模型進行更新。

Serlvet做爲控制器,用來接收用戶提交的請求,而後獲取請求中的數據,將之轉換爲業務模型須要的數據模型,而後調用業務模型相應的業務方法進行更新,同時根據業務執行結果來選擇要返回的視圖。

MVC舉例二:

Struts2框架:Struts2是基於MVC的輕量級的web應用框架。Struts2的應用範圍是Web應用,注重將Web應用領域的平常工做和常見問題抽象化,提供一個平臺幫助快速的完成Web應用開發。基於Struts2開發的Web應用天然就能實現MVC,Struts2着力於在MVC的各個部分爲開發提供相應幫助。

下面經過代碼來簡單解釋一下:

Login.html

Login.java

Struts.xml

用戶首先在Login.html中輸入用戶名和密碼,點擊登錄,此時根據action的路徑,在struts.xml中找到對應的Login,而後根據對應的class的路徑進入相應的login.Java,在這裏判斷以後,返回success或error,而後根據struts.xml中的result值,指向相應的jsp頁面。

控制器——filterdispatcher

從上面這張圖來看,用戶請求首先到達前端控制器FilterDispatcher。FilterDispatcher負責根據用戶提交的URL和struts.xml中的配置,來選擇合適的動做(Action),讓這個Action來處理用戶的請求。FilterDispatcher實際上是一個過濾器(Filter,servlet規範中的一種web組件),它是Struts2核心包裏已經作好的類,不須要咱們去開發,只是要在項目的web.xml中配置一下便可。FilterDispatcher體現了J2EE核心設計模式中的前端控制器模式。

動做——Action

在用戶請求通過FilterDispatcher以後,被分發到了合適的動做Action對象。Action負責把用戶請求中的參數組裝成合適的數據模型,並調用相應的業務邏輯進行真正的功能處理,獲取下一個視圖展現所須要的數據。Struts2的Action,相比於別的web框架的動做處理,它實現了與Servlet API的解耦,使得Action裏面不須要再直接去引用和使用HttpServletRequest與HttpServletResponse等接口。於是使得Action的單元測試更加簡單,並且強大的類型轉換也使得咱們少作了不少重複的工做。

視圖——Result

視圖結果用來把動做中獲取到的數據展示給用戶。在Struts2中有多種優秀的結果展現方式,常規的jsp,模板freemarker、velocity,還有各類其它專業的展現方式,如圖表jfreechart、報表JasperReports、將XML轉化爲HTML的XSLT等等。並且各類視圖結果在同一個工程裏面能夠混合出現。

MVC舉例三:

ASP.NET MVC

在visual studio當中新建一個ASP.NET MVC web應用程序,

新建完成以後,建立的項目當中即有controllers,models和views,體現了MVC的編程思想。

MVC的優勢:

1.耦合性

視圖層和業務層分離,這樣就容許更改視圖層代碼而不用從新編譯模型和控制器代碼,一樣,一個應用的業務流程或者業務規則的改變只須要改動MVC的模型層便可。由於模型與控制器和視圖相分離,因此很容易改變應用程序的數據層和業務規則。

2.重用性高

MVC模式容許使用各類不一樣樣式的視圖來訪問同一個服務器端的代碼,由於多個視圖能共享一個模型,它包括任何WEB(HTTP)瀏覽器或者無線瀏覽器(wap),好比,用戶能夠經過電腦也可經過手機來訂購某樣產品,雖然訂購的方式不同,但處理訂購產品的方式是同樣的。因爲模型返回的數據沒有進行格式化,因此一樣的構件能被不一樣的界面使用。

3.部署快,生命週期成本低

MVC使開發和維護用戶接口的技術含量下降。使用MVC模式使開發時間獲得至關大的縮減,它使程序員(Java開發人員)集中精力於業務邏輯,界面程序員(HTML和JSP開發人員)集中精力於表現形式上。

4.可維護性高

分離視圖層和業務邏輯層也使得WEB應用更易於維護和修改。

MVC的缺點:

1.徹底理解MVC比較複雜。

因爲MVC模式提出的時間不長,加上同窗們的實踐經驗不足,因此徹底理解並掌握MVC不是一個很容易的過程。

2.調試困難。

由於模型和視圖要嚴格的分離,這樣也給調試應用程序帶來了必定的困難,每一個構件在使用以前都須要通過完全的測試。

3.不適合小型,中等規模的應用程序

在一箇中小型的應用程序中,強制性的使用MVC進行開發,每每會花費大量時間,而且不能體現MVC的優點,同時會使開發變得繁瑣。

4.增長系統結構和實現的複雜性

對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增長結構的複雜性,並可能產生過多的更新操做,下降運行效率。

5.視圖與控制器間的過於緊密的鏈接而且下降了視圖對模型數據的訪問

視圖與控制器是相互分離,但倒是聯繫緊密的部件,視圖沒有控制器的存在,其應用是頗有限的,反之亦然,這樣就妨礙了他們的獨立重用。

依據模型操做接口的不一樣,視圖可能須要屢次調用才能得到足夠的顯示數據。對未變化數據的沒必要要的頻繁訪問,也將損害操做性能。

相關文章
相關標籤/搜索