MVC開發模式

sufeizi發表於2014-01-13

1.1  MVC模式

1.1.1  MVC模式簡介

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

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

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

1.1.2  MVC模式基礎

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

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

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

2:模型和檢視的關係

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

這種例子比比皆是,例如,在windows作業系統上瀏覽資料夾時,資料夾就那些,資料並沒有變化,但是展示方式就有多種,比如大圖示、小圖示、詳細資訊等等多種展示方式。以tomcat7資料夾下的檔案為例,按照不同的展示方式,如圖1.1所示:

 

圖1.1一個模型對應多個檢視

模型負責輸出的內容,而檢視負責輸出的形式,模型不依賴於檢視,模型與檢視是解耦的。因此在修改檢視,也就是顯示方式的時候,不必關心模型,而只需要直接修改檢視的展示方式即可。

3:MVC的元件關係圖

MVC的元件關係如圖1.2所示:

 

圖1.2 MVC元件關係圖

MVC的元件關係圖描述了模型、檢視、控制器這三個部分的互動關係,下面按照互動順序來詳細描述一下它們的互動關係:

(1)首先是展示檢視給使用者,使用者在這個檢視上進行操作,並填寫一些業務資料

(2)然後使用者會點選提交按鈕,來發出請求

(3)檢視發出的使用者請求會到達控制器,在請求中包含了想要完成什麼樣的業務功能以及相關的資料。

(4)控制器會來處理使用者請求,會把請求中的資料進行封裝,然後選擇並呼叫合適的模型,請求模型進行狀態更新,然後選擇接下來要展示給使用者的檢視。

(5)模型會去處理使用者請求的業務功能,同時進行模型狀態的維護和更新

(6)當模型狀態發生改變的時候,模型會通知相應的檢視,告訴檢視它的狀態發生了改變。

(7)檢視接到模型的通知後,會向模型進行狀態查詢,獲取需要展示的資料,然後按照檢視本身的展示方式,把這些資料展示出來。

接下來就是等待使用者下一次操作,再次從頭輪迴了。

1.1.3  MVC模式作用

在早期開發中,有一些程式設計師沒有認識到MVC模式帶來的好處,在開發的時候不遵守MVC模式。這樣做的結果就是程式結構劃分不明確,各個部分功能混亂,在業務功能發生變更時,無論是業務邏輯修改還是顯示形式修改,都要修改很多的類,“牽一髮而動全身”,導致軟體的開發和維護效率低下,錯誤百出。

而遵循MVC模式來開發系統,就會極大的避免上述問題的出現。MVC模式的核心手段是解耦,MVC模式通過仔細的劃分功能,把整個應用程式劃分成模型、檢視、控制器三個部分,然後嚴密控制三個部分之間的通訊,從而得到一個結構清晰、功能分佈合理、可重用、可擴充套件、可維護的應用程式。

因此,使用MVC模式,可以獲得以下好處:

  • 低耦合性:在MVC模式中,模型和檢視是解耦的,模型不會依賴於檢視,而檢視也僅僅是從模型中獲取需要展示的資料,並不會與模型的邏輯處理相關聯。
  • 更低的開發成本:由於MVC模式幫我們清楚的劃分了各部分的職責,就可以讓程式設計師各司其職,Java程式設計師只關心業務邏輯的實現,也就是模型部分;而介面程式設計師只關心頁面展示,也就是檢視部分即可。
  • 更好的可維護性:MVC模式劃分出明晰的模型和檢視部分,並使其解耦,在軟體需求發生變更的時候,就可以各自獨立的改變而不會相互影響,使得程式更容易維護和擴充套件。

1.1.4  Model2模型中的MVC

在Java的Web開發中,通常把Servlet+JSP+JavaBean的模型稱為Model2模型,這是一個完全遵循MVC模式的模型,基本劃分如下:

  • JavaBean作為模型,既可以作為資料模型來封裝業務資料,又可以作為業務邏輯模型來包含應用的業務操作。其中,資料模型用來儲存或傳遞業務資料,而業務邏輯模型接收到控制器傳過來的模型更新請求後,執行特定的業務邏輯處理,然後返回相應的執行結果。
  • JSP作為表現層,負責提供頁面來為使用者展示資料,提供相應的表單(Form)來用於使用者的請求,並在適當的時候(比如使用者點選提交的按鈕),向控制器發出使用者請求來請求模型進行更新。
  • Serlvet作為控制器,用來接收使用者提交的請求,然後獲取請求中的資料,將之轉換為業務模型需要的資料模型,然後呼叫業務模型相應的業務方法,請求模型進行更新,同時根據業務執行結果來選擇要返回的檢視,也就是選擇下一個頁面。

Model2實現MVC的基本結構圖如下圖所示:

 

圖1.3 Model2中的MVC

那麼,在使用者發出一個請求後,Servlet+JSP+JavaBean模型基本的響應順序是怎樣的呢?

當使用者發出一個請求後,這個請求會被控制器Servlet接收到;Servlet將請求的資料轉換成資料模型JavaBean,然後呼叫業務邏輯模型JavaBean的方法,並將業務邏輯模型返回的結果放到合適的地方,比如請求的屬性裡;最後,根據業務邏輯模型的返回結果,由控制器來選擇合適的檢視(JSP),由檢視把資料展現給使用者。

 

 

私塾線上網站原創《研磨struts2》系列

轉自請註明出處:【http://sishuok.com/forum/blogPost/list/3984.html

歡迎訪問http://sishuok.com獲取更多內容


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29361362/viewspace-1069895/,如需轉載,請註明出處,否則將追究法律責任。

相關文章