MVC在Web系統(tǒng)中的模式及其應(yīng)用_第1頁(yè)
MVC在Web系統(tǒng)中的模式及其應(yīng)用_第2頁(yè)
MVC在Web系統(tǒng)中的模式及其應(yīng)用_第3頁(yè)
MVC在Web系統(tǒng)中的模式及其應(yīng)用_第4頁(yè)
MVC在Web系統(tǒng)中的模式及其應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、MVC在Webb系統(tǒng)中的模式式與應(yīng)用面向?qū)ο蟮脑O(shè)計(jì)計(jì)模式是經(jīng)驗(yàn)驗(yàn)的總結(jié),MVC思想是原先先用于構(gòu)建用用戶界面的。這這篇文章主要要論述了如何何在新的Web應(yīng)用領(lǐng)域中中使用設(shè)計(jì)模模式和MVC架構(gòu)。文章章首先介紹了了設(shè)計(jì)模式的的概念和特點(diǎn)點(diǎn),以及MVC架構(gòu)的設(shè)計(jì)計(jì)思想,并分分析了MVC架構(gòu)中包含含的幾種主要要的模式。然然后根據(jù)Web應(yīng)用系統(tǒng)的的特點(diǎn),就如如何應(yīng)用模式式和MVC架構(gòu)提出了了一些設(shè)計(jì)思思路。 1. 引言1.1 設(shè)計(jì)模式面向?qū)ο笙蠹夹g(shù)的出現(xiàn)現(xiàn)和應(yīng)用大大大提高了軟件件的重用性和和軟件的質(zhì)量量。面向?qū)ο笙蟮木幊桃脖缺纫酝母鞣N種編程模式要要簡(jiǎn)單和高效效,但是面向向?qū)ο蟮脑O(shè)計(jì)計(jì)方法要比以以往的設(shè)

2、計(jì)方方法要復(fù)雜和和有技巧得多多,一個(gè)良好好的設(shè)計(jì)應(yīng)該該既具有對(duì)問(wèn)問(wèn)題的針對(duì)性性,也充分考考慮到對(duì)將來(lái)來(lái)問(wèn)題和需求求有足夠的通通用性。在過(guò)過(guò)去的十幾年年中,人們?cè)谠趯?duì)面向?qū)ο笙蠹夹g(shù)的研究究探索和實(shí)際際應(yīng)用中針對(duì)對(duì)某些問(wèn)題創(chuàng)創(chuàng)造了一些良良好的解決方方案,即所謂的面面向?qū)ο蟮脑O(shè)設(shè)計(jì)模式。面面向?qū)ο蠹夹g(shù)術(shù)的目的之一一就是提高軟軟件的重用性性,而對(duì)設(shè)計(jì)計(jì)模式、設(shè)計(jì)計(jì)方案的重用用則從更深的的層次上體現(xiàn)現(xiàn)了重用的意意義和本質(zhì)。人們對(duì)設(shè)計(jì)模式有很多定義,其中被引用的最多是Christopher Alexander的設(shè)計(jì)模式的定義:每一個(gè)設(shè)計(jì)模式是一個(gè)三方的規(guī)則,它表達(dá)了一個(gè)上下文環(huán)境(Context),一個(gè)問(wèn)

3、題和一個(gè)解決方案。設(shè)計(jì)模式一般有如下幾個(gè)基本要素:模式名稱,問(wèn)題,目的,解決方案,效果,樣例代碼和相關(guān)設(shè)計(jì)模式。設(shè)計(jì)模式的分類有好幾種,可以根據(jù)其目的分為創(chuàng)建型(Creational),結(jié)構(gòu)型(Structural)和行為型(Behavioral)三種。創(chuàng)建型模式主要是用來(lái)創(chuàng)建對(duì)象,結(jié)構(gòu)型模式主要是處理類或?qū)ο蟮慕M合,行為型模式則主要用來(lái)描述對(duì)類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)。也可以根據(jù)范圍將設(shè)計(jì)模式分為類模式和對(duì)象模式,類模式處理類和子類之間的關(guān)系,這些關(guān)系通過(guò)繼承建立,在編譯時(shí)刻就被確定下來(lái),是屬于靜態(tài)的。對(duì)象模式是處理對(duì)象間的關(guān)系,這些關(guān)系在運(yùn)行時(shí)刻變化,更具動(dòng)態(tài)性。 模式的特點(diǎn):是通過(guò)經(jīng)

4、驗(yàn)獲取的,以某種結(jié)構(gòu)化的格式書寫下來(lái),避免了遇到相同的問(wèn)題重頭設(shè)計(jì),存在于不同的抽象層,在不斷完善的,是可重用的人工產(chǎn)物,使設(shè)計(jì)和最好的練習(xí)交互,以被組合起來(lái)解決更大的問(wèn)題。 1.2 MVCC架構(gòu)MVC最初是在Smallltalk-80中被用來(lái)構(gòu)建用戶界面的。M代表模型Model, V代表視圖 View, C代表 控制器Contrrollerr。MVC的目的是增增加代碼的重重用率,減少少數(shù)據(jù)表達(dá),數(shù)數(shù)據(jù)描述和應(yīng)應(yīng)用操作的耦耦合度。 同時(shí)也使得得軟件可維護(hù)護(hù)性,可修復(fù)復(fù)性,可擴(kuò)展展性,靈活性性以及封裝性性大大提高。單用戶的應(yīng)用通常是以事件驅(qū)動(dòng)的用戶界面為組織結(jié)構(gòu)的。開發(fā)人員用一個(gè)界面工具畫了一個(gè)

5、用戶接口界面,然后編寫代碼根據(jù)用戶輸入去執(zhí)行相應(yīng)的動(dòng)作,許多交互式的開發(fā)環(huán)境鼓勵(lì)這么做,因?yàn)樗鼜?qiáng)調(diào)先有界面然后再有功能。一些軟件設(shè)計(jì)模式策略是這樣的,然后經(jīng)常將固定后的代碼融入最后的系統(tǒng)當(dāng)中。導(dǎo)致的結(jié)果就是,程序組織圍繞用戶界面元素和用戶在那些界面元素上的動(dòng)作,數(shù)據(jù)的存儲(chǔ),應(yīng)用的功能以及用來(lái)顯示的代碼都雜亂無(wú)章的纏繞在一起。在單用戶的系統(tǒng)里代碼結(jié)構(gòu)是可以這樣的,因?yàn)橄到y(tǒng)需求不會(huì)頻繁變化。但是對(duì)一個(gè)大的系統(tǒng)如大型Web系統(tǒng),或電子商務(wù)系統(tǒng)來(lái)說(shuō)就不太適用了。通過(guò)把數(shù)據(jù)模式從各種可以被存取和控制的數(shù)據(jù)中分離出來(lái)可以改善分布式系統(tǒng)的設(shè)計(jì)。MVC設(shè)計(jì)模式由三部分組成。模型是應(yīng)用對(duì)象,沒(méi)有用戶界面。視圖表

6、示它在屏幕上的顯示,代表流向用戶的數(shù)據(jù)。控制器定義用戶界面對(duì)用戶輸入的響應(yīng)方式,負(fù)責(zé)把用戶的動(dòng)作轉(zhuǎn)成針對(duì)Model的操作。Model 通過(guò)更新View的數(shù)據(jù)來(lái)反映數(shù)據(jù)的變化。三者關(guān)系如圖: 對(duì)MVC關(guān)系圖的理解圖2 MVC的分工與協(xié)作2. MVC中的設(shè)計(jì)模式一個(gè)以MVC為架構(gòu)的系統(tǒng)包含了很多的設(shè)計(jì)模式,但是與MVC最為密切相關(guān)的是下面三種模式:Observer, Composite和Strategy。2.1 Observer模式MVC通過(guò)使用定購(gòu)/通知的方式分離了Model和View。View要保證自己顯示能正確地反映出Model的內(nèi)容和狀態(tài)。一旦Model的內(nèi)容發(fā)生變化,必須有一個(gè)機(jī)制來(lái)使得

7、Model能夠通知相關(guān)的View,使得相關(guān)的View可以在適當(dāng)?shù)臅r(shí)機(jī)刷新數(shù)據(jù)。這個(gè)設(shè)計(jì)還可以解決更一般的問(wèn)題,將對(duì)象分離,使得一個(gè)對(duì)象的改變能夠影響到另一些對(duì)象,而這個(gè)對(duì)象并不知道那些被影響的對(duì)象的細(xì)節(jié)。這就是被描述為Observer的設(shè)計(jì)模式。 模式類型:Observer模式是對(duì)象型模式,同時(shí)它也是行為型模式。模式目的:定義對(duì)象間的一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的值或狀態(tài)發(fā)生改變時(shí),所有與它有依賴關(guān)系的對(duì)象都得到通知并自動(dòng)更新。某一數(shù)據(jù)可能有多種顯示方式,并且可能同時(shí)以不同的方式顯示(如圖2)。當(dāng)通過(guò)某一種方式改變了數(shù)據(jù),那么其他的顯示都應(yīng)該能立即知道數(shù)據(jù)的改變和做相應(yīng)的調(diào)整。模式結(jié)構(gòu):圖 3

8、. Observer模式的結(jié)構(gòu)圖效果:1. 抽象耦合。目標(biāo)對(duì)象只知道它有一些觀察者,每個(gè)觀察者都符合抽象的Observer類的簡(jiǎn)單接口,并不知道它們具體屬于哪個(gè)類。這樣使得目標(biāo)和觀察者之間的耦合最小且抽象。2. 支持廣播通信。目標(biāo)發(fā)送通知不用指定觀察者,如何處理通知由觀察者決定。3. 可能的意外更新。要處理好更新邏輯,避免錯(cuò)誤更新。2.2 Commpositte模式MVC的一個(gè)重要要特征就是View可以嵌套。嵌嵌套的組合視視圖可用于任任何視圖可用用的地方,而而且可以管理理嵌套視圖。這這種思想反映映出將組合的的視圖與其組組件平等對(duì)待待的設(shè)計(jì)。這這種設(shè)計(jì)思想想在面向?qū)ο笙箢I(lǐng)域內(nèi)被描描述成為Comp

9、oosite的設(shè)計(jì)模式式。模式類型型:Compoosite模式是對(duì)象象型模式,同同時(shí)它也是結(jié)結(jié)構(gòu)型模式。模式目的:將對(duì)象組合成樹形結(jié)構(gòu)以表示部分-整體層次結(jié)構(gòu)。Composite使組合對(duì)象的使用和單個(gè)對(duì)象的使用具有一致性。模式結(jié)構(gòu):圖4. Composite模式的結(jié)構(gòu)圖效果:1. 定義了包含簡(jiǎn)單對(duì)象和組合對(duì)象的類層次結(jié)構(gòu)。簡(jiǎn)單對(duì)象可以被組合到復(fù)雜對(duì)象中,而組合的對(duì)象可以再被組合。這樣客戶端代碼中用到簡(jiǎn)單對(duì)象的地方都可以使用組合對(duì)象。2. 簡(jiǎn)化客戶端代碼。客戶端不用知道某對(duì)象是簡(jiǎn)單對(duì)象還是組合對(duì)象,可以以一致的方式使用這些對(duì)象。3. 更容易增加新類型的組件。新的組件可以方便地加入已有組合對(duì)象中不

10、用改變客戶端代碼。2.3 Strrategyy模式MVC的另一重要要特征是可以以在不改變View的情況下改改變View對(duì)用戶輸入入的響應(yīng)方式式。這對(duì)一個(gè)個(gè)經(jīng)常需要變變更響應(yīng)邏輯輯的系統(tǒng)來(lái)說(shuō)說(shuō)是非常重要要的。MVC把響應(yīng)邏輯輯封裝在Contrrollerr中。有一個(gè)Contrrollerr的類層次結(jié)結(jié)構(gòu),可以方方便地對(duì)原有有Contrrollerr做適當(dāng)改變變,創(chuàng)建新的的Contrrollerr。View使用Contrrollerr子類的實(shí)例例來(lái)實(shí)現(xiàn)一個(gè)個(gè)特定的響應(yīng)應(yīng)策略。要實(shí)實(shí)現(xiàn)不同的響響應(yīng)策略,只只要用不同種類類的Contrrollerr實(shí)例替換即即可。還可以以在運(yùn)行時(shí)刻刻通過(guò)改變View的

11、Contrrollerr來(lái)改變View對(duì)用戶輸入入的響應(yīng)策略略。這種View-CControoller的關(guān)系是被被描述為Strattegy的設(shè)計(jì)模式式的一個(gè)例子子。模式類型型:Strattegy模式是對(duì)象象型模式,同同時(shí)它也是行行為型模式。模式目的:定義一系列的算法,并且把它們封裝起來(lái),使它們可以互相替換,使得算法可以獨(dú)立于使用它的客戶端而變化。 模式結(jié)構(gòu):圖5. Strrategyy模式的結(jié)構(gòu)圖圖效果:1. SStrateegy類層次為Conteext定義了可重重用的相關(guān)算算法或行為。2. 替代繼承的方法。如果直接繼承Context,給以不同的行為,會(huì)將行為加到Context中,從而將算法的

12、實(shí)現(xiàn)與Context混合起來(lái),使Context難以理解,維護(hù)和擴(kuò)展,而且不能動(dòng)態(tài)地改變算法。將算法封裝在獨(dú)立的Strategy類,可以使得算法獨(dú)立于Context改變,容易切換擴(kuò)展。3. 可以提供相同行為的不同實(shí)現(xiàn)。4. 客戶端必須了解Strategy之間有何不同。5. Context和Strategy之間的通信開銷。6. 增加了對(duì)象的數(shù)目。3. MVC在在 Web系統(tǒng)中的應(yīng)應(yīng)用現(xiàn)在的一一些基于Web的分布式系系統(tǒng)如B2B電子商務(wù)系系統(tǒng),就適合合采用MVC架構(gòu)。通過(guò)分分析,從高層層次的角度可可以將一個(gè)應(yīng)應(yīng)用的對(duì)象分分為三類。一一類就是負(fù)責(zé)責(zé)顯示的對(duì)象象,一類對(duì)象象包含商業(yè)規(guī)規(guī)則和數(shù)據(jù),還還有一

13、類就是是接收請(qǐng)求,控控制商業(yè)對(duì)象象去完成請(qǐng)求求。這些應(yīng)用用的顯示是經(jīng)經(jīng)常需要變換換的,如網(wǎng)頁(yè)頁(yè)的風(fēng)格,色色調(diào),還有需需要顯示的內(nèi)內(nèi)容,內(nèi)容的的顯示方式等等。而商業(yè)規(guī)規(guī)則和數(shù)據(jù)是是相對(duì)要穩(wěn)定定的。因此,表表示顯示的對(duì)對(duì)象View經(jīng)常需要變變化的,表示示商業(yè)規(guī)則和和數(shù)據(jù)的對(duì)象象Model要相對(duì)穩(wěn)定,而而表示控制的的Contrrollerr則最穩(wěn)定。通通常當(dāng)系統(tǒng)發(fā)發(fā)布后,View對(duì)象是由美美工,HTML/JSP設(shè)計(jì)人員或或者系統(tǒng)管理理員來(lái)負(fù)責(zé)管管理的。Contrrollerr對(duì)象由應(yīng)用用開發(fā)人員開開發(fā)實(shí)施,商商業(yè)規(guī)則對(duì)象象和商業(yè)數(shù)據(jù)據(jù)對(duì)象則由開開發(fā)人員,領(lǐng)領(lǐng)域?qū)<液蛿?shù)數(shù)據(jù)庫(kù)管理員員共同完成的的。顯示

14、邏輯輯在Web層或客戶端端控制,可以以是Servllet 或JSP,動(dòng)態(tài)地生生成Html。一般來(lái)說(shuō)說(shuō)采用JSP要比采用Servllet要好。JSP更好地將代代碼與Html部分分開,有有利于頁(yè)面設(shè)設(shè)計(jì)人員和代代碼開發(fā)人員員的分離,提提高效率。同同時(shí)JSP可以完成所所有Servleet完成的功能能,實(shí)際上JSP最終也轉(zhuǎn)換換成一個(gè)Servllet。與控制有有關(guān)的對(duì)象存存在于系統(tǒng)的的每一個(gè)層次次,協(xié)調(diào)跨層層動(dòng)作。包含含商業(yè)規(guī)則和和數(shù)據(jù)的對(duì)象象存在于EJB層(以EJB為中心的模模式)或Web層(以Web為中心的模模式)。3.1 Vieew在Web系統(tǒng)中的應(yīng)應(yīng)用View代表系統(tǒng)的的顯示,它完完全存在于We

15、b層。一般由JSP, Java Bean和Custoom Tag組成。JSP可以動(dòng)態(tài)生生成網(wǎng)頁(yè)內(nèi)容容,Customm Tag 更方便了使使用Java Bean,而且它可可以封裝顯示示邏輯,更有有利于于模塊塊化和重用。一一些設(shè)計(jì)良好好的Customm Tag可以在多個(gè)JSP甚至可以在在不同的系統(tǒng)統(tǒng)里重復(fù)使用用。Java Bean用來(lái)控制JSP和Model對(duì)象。JSP通過(guò)Java Bean 來(lái)讀取Model對(duì)象中的數(shù)數(shù)據(jù),Model和Contrrollerr對(duì)象則負(fù)責(zé)責(zé)對(duì)Java Bean的數(shù)據(jù)更新新。一般來(lái)說(shuō)說(shuō),可以先要要設(shè)計(jì)出所有有可能出現(xiàn)的的屏幕,即用用戶使用系統(tǒng)統(tǒng)時(shí)可以看到到的所有內(nèi)容容。

16、然后根據(jù)據(jù)這些內(nèi)容,找找出公共部分分,靜態(tài)部分分和動(dòng)態(tài)變化化部分??梢砸钥紤]使用模模板方法,把把公用的內(nèi)容容單獨(dú)生成JSP,需要變化化的也各自生生成Html或JSP, 由一個(gè)模板JSP, 把這些不同同部分動(dòng)態(tài)地地引入(incluude方法)。還還有一個(gè)要考考慮的問(wèn)題就就是屏幕的選選擇問(wèn)題,當(dāng)當(dāng)處理完用戶戶請(qǐng)求,模板板被自動(dòng)調(diào)用用來(lái)顯示,這這個(gè)顯示一定定要知道用戶戶關(guān)心的屏幕幕是有哪些部部分組成。所所以可以考慮慮把所有屏幕幕的定義放在在一個(gè)集中的的文件里,如如一個(gè)java文件或文本本文件。由于于考慮到屏幕幕定義文件將將來(lái)的變更可可能性,最好好使用文本文文件如一個(gè)XML文件,這樣樣將來(lái)更改不不用重

17、新編譯譯??梢愿鶕?jù)據(jù)用戶輸入的的URL和參數(shù)可以以映射到某一一個(gè)結(jié)果屏幕幕,當(dāng)然有可可能還要根據(jù)據(jù)動(dòng)作的執(zhí)行行結(jié)果選擇不不同的結(jié)果屏屏幕內(nèi)容。所所以需要一個(gè)個(gè)請(qǐng)求與資源源的匹配文件件(XML),如果一一個(gè)URL請(qǐng)求有幾種不不同結(jié)果,則則要在該文件件中指明是否否需要流控制制(一種contrrollerr對(duì)象)以及及不同流向的的對(duì)應(yīng)屏幕。3.2 Model在Web系統(tǒng)中的應(yīng)用Model對(duì)象代表了商業(yè)規(guī)則和商業(yè)數(shù)據(jù),存在于EJB層和Web層。在J2EE的規(guī)范中,系統(tǒng)有些數(shù)據(jù)需要存儲(chǔ)于數(shù)據(jù)庫(kù)中,如用戶的賬號(hào)信息(account model),公司的數(shù)據(jù)(company model)等,也有一些不需要記

18、錄在數(shù)據(jù)庫(kù)里的,如某用戶瀏覽的當(dāng)前產(chǎn)品目錄(catalog model),他的購(gòu)物內(nèi)容(shopping cart model)等。這些model數(shù)據(jù)存在于哪一層要根據(jù)它們的生命周期和范圍來(lái)決定。在Web層有HttpSession和ServletContext及Java Bean對(duì)象來(lái)存儲(chǔ)數(shù)據(jù),在EJB層則有EJB來(lái)存儲(chǔ)數(shù)據(jù)和邏輯。Web層的Java Bean的model對(duì)象存儲(chǔ)了EJB層model對(duì)象的數(shù)據(jù)的拷貝。因?yàn)镋JB層有很多不同的model對(duì)象,所以Web層可以通過(guò)一個(gè)ModelManager來(lái)控制EJB層的各model對(duì)象,在ModelManger中可以封裝使用后臺(tái)model對(duì)象的

19、方法。在EJB層把所有的數(shù)據(jù)和規(guī)則都模式化為EJB也是不恰當(dāng)?shù)?。如可以把存取?shù)據(jù)庫(kù)的對(duì)象模式化為DAO對(duì)象。DAO中可以封裝與具體數(shù)據(jù)庫(kù)的交互細(xì)節(jié),如可以讀寫不同的表,多個(gè)數(shù)據(jù)庫(kù),甚至多種數(shù)據(jù)庫(kù)。如定單的model對(duì)象可以是一個(gè)OrderDAO, 它可能要同時(shí)處理Order表,OrderStatus表和OrderItemLines表。還有可以考慮使用Value對(duì)象。一個(gè)Value 對(duì)象可以封裝遠(yuǎn)程對(duì)象,因?yàn)槊恳粋€(gè)讀遠(yuǎn)程對(duì)象的屬性都可能是一個(gè)遠(yuǎn)程過(guò)程調(diào)用,都會(huì)耗費(fèi)網(wǎng)絡(luò)資源??梢栽贓JB的遠(yuǎn)程對(duì)象中使用Value對(duì)象. 在遠(yuǎn)程對(duì)象中一次性得到Value對(duì)象來(lái)得到所有屬性的值。3.3 Conntrolller在Web系統(tǒng)中的應(yīng)應(yīng)用Conttrolleer對(duì)象協(xié)調(diào)Model與View,把用戶請(qǐng)請(qǐng)求翻譯成系系統(tǒng)識(shí)別的事事件。在Web層,一般有有一個(gè)Mai

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論