1.1 MVC模式1.1.1 MVC模式簡介MVC是一種架構(gòu)型模式,,它本身并不引入新的功能,,只是用來指導(dǎo)我們改善應(yīng)用程序的架構(gòu),使得應(yīng)用的模型和視圖相分離,,從而得到更好的開發(fā)和維護效率,。 在MVC模式中,應(yīng)用程序被劃分成了模型(Model),、視圖(View)和控制器(Controller)三個部分,。其中,,模型部分包含了應(yīng)用程序的業(yè)務(wù)邏輯和業(yè)務(wù)數(shù)據(jù);視圖部分封裝了應(yīng)用程序的輸出形式,,也就是通常所說的頁面或者是界面,;而控制器部分負責協(xié)調(diào)模型和視圖,根據(jù)用戶請求來選擇要調(diào)用哪個模型來處理業(yè)務(wù),,以及最終由哪個視圖為用戶做出應(yīng)答,。 MVC模式的這三個部分的職責非常明確,而且相互分離,,因此每個部分都可以獨立的改變而不影響其他部分,,從而大大提高了應(yīng)用的靈活性和重用性。 1.1.2 MVC模式基礎(chǔ)在MVC模式中,,一個應(yīng)用被劃分成了模型(Model),、視圖(View)和控制器(Controller)三個部分,接下來認識一下這三個部分,。 1:首先看一下模型,、視圖、控制器各部分的作用
2:模型和視圖的關(guān)系 在MVC中,,模型和視圖是分離的,通常視圖里面不會有任何邏輯實現(xiàn),;而模型也是不依賴于視圖的,,同一個模型可能會有很多種不同的展示方式,也就是同一個模型可以對應(yīng)多種不同的視圖,。 這種例子比比皆是,,例如,在windows操作系統(tǒng)上瀏覽文件夾時,,文件夾就那些,,數(shù)據(jù)并沒有變化,但是展示方式就有多種,,比如大圖標,、小圖標、詳細信息等等多種展示方式,。以tomcat7文件夾下的文件為例,,按照不同的展示方式,如圖1.1所示:
圖1.1一個模型對應(yīng)多個視圖 模型負責輸出的內(nèi)容,,而視圖負責輸出的形式,,模型不依賴于視圖,模型與視圖是解耦的,。因此在修改視圖,,也就是顯示方式的時候,不必關(guān)心模型,,而只需要直接修改視圖的展示方式即可,。 3:MVC的組件關(guān)系圖 MVC的組件關(guān)系如圖1.2所示:
圖1.2 MVC組件關(guān)系圖 MVC的組件關(guān)系圖描述了模型、視圖,、控制器這三個部分的交互關(guān)系,,下面按照交互順序來詳細描述一下它們的交互關(guān)系: (1)首先是展示視圖給用戶,用戶在這個視圖上進行操作,,并填寫一些業(yè)務(wù)數(shù)據(jù) (2)然后用戶會點擊提交按鈕,,來發(fā)出請求 (3)視圖發(fā)出的用戶請求會到達控制器,在請求中包含了想要完成什么樣的業(yè)務(wù)功能以及相關(guān)的數(shù)據(jù),。 (4)控制器會來處理用戶請求,,會把請求中的數(shù)據(jù)進行封裝,然后選擇并調(diào)用合適的模型,,請求模型進行狀態(tài)更新,,然后選擇接下來要展示給用戶的視圖。 (5)模型會去處理用戶請求的業(yè)務(wù)功能,,同時進行模型狀態(tài)的維護和更新 (6)當模型狀態(tài)發(fā)生改變的時候,,模型會通知相應(yīng)的視圖,,告訴視圖它的狀態(tài)發(fā)生了改變。 (7)視圖接到模型的通知后,,會向模型進行狀態(tài)查詢,,獲取需要展示的數(shù)據(jù),然后按照視圖本身的展示方式,,把這些數(shù)據(jù)展示出來,。 接下來就是等待用戶下一次操作,再次從頭輪回了,。 1.1.3 MVC模式作用在早期開發(fā)中,,有一些程序員沒有認識到MVC模式帶來的好處,在開發(fā)的時候不遵守MVC模式,。這樣做的結(jié)果就是程序結(jié)構(gòu)劃分不明確,,各個部分功能混亂,在業(yè)務(wù)功能發(fā)生變更時,,無論是業(yè)務(wù)邏輯修改還是顯示形式修改,,都要修改很多的類,“牽一發(fā)而動全身”,,導(dǎo)致軟件的開發(fā)和維護效率低下,,錯誤百出。 而遵循MVC模式來開發(fā)系統(tǒng),,就會極大的避免上述問題的出現(xiàn),。MVC模式的核心手段是解耦,MVC模式通過仔細的劃分功能,,把整個應(yīng)用程序劃分成模型,、視圖、控制器三個部分,,然后嚴密控制三個部分之間的通信,,從而得到一個結(jié)構(gòu)清晰、功能分布合理,、可重用,、可擴展、可維護的應(yīng)用程序,。 因此,,使用MVC模式,可以獲得以下好處:
1.1.4 Model2模型中的MVC在Java的Web開發(fā)中,,通常把Servlet+JSP+JavaBean的模型稱為Model2模型,這是一個完全遵循MVC模式的模型,,基本劃分如下:
Model2實現(xiàn)MVC的基本結(jié)構(gòu)圖如下圖所示:
圖1.3 Model2中的MVC 那么,,在用戶發(fā)出一個請求后,Servlet+JSP+JavaBean模型基本的響應(yīng)順序是怎樣的呢,? 當用戶發(fā)出一個請求后,,這個請求會被控制器Servlet接收到,;Servlet將請求的數(shù)據(jù)轉(zhuǎn)換成數(shù)據(jù)模型JavaBean,然后調(diào)用業(yè)務(wù)邏輯模型JavaBean的方法,,并將業(yè)務(wù)邏輯模型返回的結(jié)果放到合適的地方,,比如請求的屬性里;最后,,根據(jù)業(yè)務(wù)邏輯模型的返回結(jié)果,,由控制器來選擇合適的視圖(JSP),由視圖把數(shù)據(jù)展現(xiàn)給用戶,。 |
|