MVC開發模式


 MVC模式簡介

MVC是一種架構型模式,它本身並不引入新的功能,只是用來指導我們改善應用程序的架構,使得應用的模型和視圖相分離,從而得到更好的開發和維護效率。

       在MVC模式中,應用程序被划分成了模型(Model)、視圖(View)和控制器(Controller)三個部分。其中,模型部分包含了應用程序的業務邏輯和業務數據;視圖部分封裝了應用程序的輸出形式,也就是通常所說的頁面或者是界面;而控制器部分負責協調模型和視圖,根據用戶請求來選擇要調用哪個模型來處理業務,以及最終由哪個視圖為用戶做出應答。

MVC模式的這三個部分的職責非常明確,而且相互分離,因此每個部分都可以獨立的改變而不影響其他部分,從而大大提高了應用的靈活性和重用性。

  MVC模式基礎

在MVC模式中,一個應用被划分成了模型(Model)、視圖(View)和控制器(Controller)三個部分,接下來認識一下這三個部分。

1:首先看一下模型、視圖、控制器各部分的作用

  • 模型(Model):負責封裝應用的狀態,並實現應用的功能。通常又分為數據模型和業務邏輯模型,數據模型用來存放業務數據,比如訂單信息、用戶信息等;而業務邏輯模型包含應用的業務操作,比如訂單的添加或者修改等。
  • 視圖(View):用來將模型的內容展現給用戶,用戶可以通過視圖來請求模型進行更新。視圖從模型獲得要展示的數據,然后用自己的方式展現給用戶,相當於提供界面來與用戶進行人機交互;用戶在界面上操作或者填寫完成后,會點擊提交按鈕或是以其它觸發事件的方式,來向控制器發出請求。
  • 控制器(Controller):用來控制應用程序的流程和處理視圖所發出的請求。當控制器接收到用戶的請求后,會將用戶的數據和模型的更新相映射,也就是調用模型來實現用戶請求的功能;然后控制器會選擇用於響應的視圖,把模型更新后的數據展示給用戶。

2:模型和視圖的關系

在MVC中,模型和視圖是分離的,通常視圖里面不會有任何邏輯實現;而模型也是不依賴於視圖的,同一個模型可能會有很多種不同的展示方式,也就是同一個模型可以對應多種不同的視圖。

這種例子比比皆是,例如,在windows操作系統上瀏覽文件夾時,文件夾就那些,數據並沒有變化,但是展示方式就有多種,比如大圖標、小圖標、詳細信息等等多種展示方式。以tomcat7文件夾下的文件為例,按照不同的展示方式,如圖1.1所示:

 

 

 

MVC開發模式和傳統開發模式的區別

    Model1模式:使用純JSP或者JSP+JavaBean開發,存在如下缺陷:JSP頁面中混合了HTML和JAVA代碼,從而給代碼的開發和閱讀帶 來了麻煩;系統后期維護和擴展非常困難,例如在JSP頁面進行數據庫連接和操作,如果需要對數據庫進行任何修改,都必須打開所有操作數據庫的JSP頁面進 行相應的修改,當頁面非常多的時候,工作量相當大;系統不容易調試,由於HTML、JAVA、JavaScript都混合在一起,必須要啟動服務器並調用 JSP頁面才能查看運行效果。故此模式適合小規模的WEB應用開發。
     JSP+JavaBean開發,雖然實現了邏輯功能和顯示功能的分離,但是由於視圖層和控制層都是由JSP頁面實現的,即視圖層和控制層沒有實現分離,所以它任然屬於Model1模式。

Model2模式——MVC開發模式
   它是為了克服Model1存在的不足而設計的,MVC的具體含義是:model+view+control,即模型+視圖+控制,這樣的模式集成了JSP、Serclet、JavaBean,非常適合大型項目的開發。

View視圖層
  代表和用戶交互的界面,可以通過html、xml、applet小java程序等實現,它僅僅負責數據的采集和處理(顯示)。在JSP中它由JSP頁面單獨實現。

Model模型層
   它常常使用JavaBean來編寫,它接受視圖層請求的數據,然后進行相應的業務處理並返回最終的處理結果,它負擔的責任最為核心,並利用JavaBean具有的特性實現了代碼的重用和擴展以及給維護帶來了方便。

Control控制層
  控制層是從用戶端接收請求,然后將請求傳遞給模型層並告訴模型層應該調用什么功能模塊來處理該請求,它將協調視圖層和模型層之間的工作,起到中間樞紐的作用,它一般交由Serclet來實現。

MVC開發模式與Model1模式比較,顯示出如下特點:
(1)各層各負其責,互不干涉。各自更新之后對其它層沒有任何干擾;
(2)MVC開發模式有利於責任分工,讓專門人員分別從事專門層的設計,提高工作效率和質量;
(3)組件可以得到很好的重用,由於分工明確,各層的組件可以獨立成一個可以重用的組件。
   但是MVC開發模式相對Model1來說比較復雜,所以它比較適合開發大中型項目應用,而Model1模式適合小規模的WEB應用開發。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM