




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
精品文檔-下載后可編輯MVC架構(gòu)在Web應(yīng)用系統(tǒng)的應(yīng)用-設(shè)計(jì)應(yīng)用
和C/S結(jié)構(gòu)相比,B/S結(jié)構(gòu)受限于網(wǎng)絡(luò)帶寬不利于進(jìn)行大數(shù)據(jù)量的統(tǒng)計(jì)分析,網(wǎng)絡(luò)傳輸存在潛在的安全問(wèn)題,還有用戶界面不及C/S結(jié)構(gòu)友好等等,但隨著網(wǎng)絡(luò)帶寬和網(wǎng)絡(luò)應(yīng)用的發(fā)展,加上AJAX技術(shù)的流行,使得現(xiàn)在越來(lái)越多的MIS系統(tǒng)或基于MIS系統(tǒng)的化應(yīng)用系統(tǒng)都開(kāi)始傾向于采用B/S結(jié)構(gòu)進(jìn)行設(shè)計(jì),充分利用B/S結(jié)構(gòu)的優(yōu)點(diǎn)。但是,要充分發(fā)揮Web應(yīng)用的內(nèi)在潛力,挖掘應(yīng)用深度和擴(kuò)大適應(yīng)能力,需要采用先進(jìn)的應(yīng)用架構(gòu)和以實(shí)用為根本準(zhǔn)則,使得系統(tǒng)既能滿足業(yè)務(wù)需求,又能適應(yīng)將來(lái)發(fā)展需要。因此,在開(kāi)發(fā)Web應(yīng)用系統(tǒng)時(shí)需要盡量遵循Web應(yīng)用系統(tǒng)設(shè)計(jì)原則。
1MVC描述的軟件模型
MVC是三個(gè)單詞的縮寫(xiě),分別為:模型(Model),視圖(View)和控制Controller)。MVC模式的目的就是實(shí)現(xiàn)Web系統(tǒng)的職能分工。Model層實(shí)現(xiàn)系統(tǒng)中的業(yè)務(wù)邏輯,通??梢杂肑avaBean或EJB來(lái)實(shí)現(xiàn)。View層用于與用戶的交互,通常用JSP來(lái)實(shí)現(xiàn)。Controller層是Model與View之間溝通的橋梁,它可以分派用戶的請(qǐng)求并選擇恰當(dāng)?shù)囊晥D以用于顯示,同時(shí)它也可以解釋用戶的輸入并將它們映射為模型層可執(zhí)行的操作。這三層結(jié)構(gòu)之間的關(guān)系如圖1所示。
模型層(也稱業(yè)務(wù)層)用于處理程序邏輯。它的任務(wù)是管理應(yīng)用程序域的行為和數(shù)據(jù),響應(yīng)來(lái)自控制層的狀態(tài)指令,把原有數(shù)據(jù)按照業(yè)務(wù)邏輯轉(zhuǎn)換成指定意義的數(shù)據(jù)提供給視圖層顯示。
視圖層用于把表示模型數(shù)據(jù)、邏輯關(guān)系和狀態(tài)的信息以特定的形式表現(xiàn)在用戶界面上。視圖層的顯示信息來(lái)自模型層,同一個(gè)模型可以對(duì)應(yīng)多個(gè)視圖。
控制層用于處理用戶與軟件的交互操作。控制層通知模型和視圖做出相應(yīng)的狀態(tài)改變,使模型和視圖協(xié)調(diào)工作。
2MVC模式設(shè)計(jì)
模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有多的處理任務(wù)。例如它可能用象EJBs和ColdFusionComponents這樣的構(gòu)件對(duì)象來(lái)處理數(shù)據(jù)庫(kù)。被模型返回的數(shù)據(jù)是中立的,就是說(shuō)模型與數(shù)據(jù)格式無(wú)關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫(xiě)就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。MVC模式把界面表現(xiàn)和邏輯控制語(yǔ)句強(qiáng)制分離,解決了頁(yè)面設(shè)計(jì)和程序開(kāi)發(fā)中的工作交錯(cuò)與沖突,并解決了由于商業(yè)邏輯嵌入造成程序不可重用而且很難維護(hù)的問(wèn)題。
本文設(shè)計(jì)了一個(gè)基于PHP語(yǔ)言、XML和XSL模板技術(shù)的MVC架構(gòu)的Web應(yīng)用系統(tǒng)。
2.1代碼結(jié)構(gòu)
在系統(tǒng)中每一個(gè)頁(yè)面被定義為一個(gè)Action,控制器中定義了每一個(gè)Action對(duì)應(yīng)的模型和視圖,它們之間的對(duì)應(yīng)關(guān)系如圖2所示。
表1為系統(tǒng)的基礎(chǔ)代碼結(jié)構(gòu),除少量的靜態(tài)頁(yè)面放在htdocs目錄下外,其余的程序都放在PHP的庫(kù)文件目錄下。
在這個(gè)代碼結(jié)構(gòu)中,模型、視圖和控制器三部分分別放置在不同目錄中。其中,視圖層包括顯示模板(XSL)和頁(yè)面操作控制(JS)二部分,模型層包括業(yè)務(wù)邏輯處理類庫(kù)(ActionClass)、數(shù)據(jù)輸出處理(ActionExecute)和PHP基礎(chǔ)類庫(kù)(PHPClass)三部分。因此,在系統(tǒng)中各部分的開(kāi)發(fā)由不同的角色來(lái)完成,角色之間的工作交錯(cuò)和沖突可以減少,使系統(tǒng)程序升級(jí)和維護(hù)的思路也更加明晰。
2.2系統(tǒng)實(shí)現(xiàn)
在系統(tǒng)中,客戶端瀏覽器中呈現(xiàn)的是系統(tǒng)的視圖部分,而模型和控制器則是透明的。當(dāng)Web服務(wù)器接收到客戶提交的HTTP請(qǐng)求后,交給服務(wù)器中的控制器來(lái)處理??刂破靼凑照?qǐng)求中的Action信息,從系統(tǒng)配置中提取此Action的映射表,并把此請(qǐng)求映射到相應(yīng)的處理模型;處理模型進(jìn)行業(yè)務(wù)邏輯處理,處理完后返回狀態(tài)更新的請(qǐng)求并將XML格式的數(shù)據(jù)結(jié)果給控制器;控制器根據(jù)結(jié)果選擇相應(yīng)視圖模板并合成視圖返回給客戶。程序架構(gòu)如圖3所示。
2.2.1控制層的實(shí)現(xiàn)
在這個(gè)系統(tǒng)中,控制器主要有以下四個(gè)作用。
(1)根據(jù)Action名稱從數(shù)據(jù)庫(kù)的映射表中找到處理此Action的模型信息、視圖模板和此視圖的用戶操作控制信息。
(2)調(diào)用模型處理Action請(qǐng)求。
(3)合成業(yè)務(wù)邏輯處理返回的XML格式的數(shù)據(jù)信息和XSL視圖模板為HTML的文件,并返回給客戶端。
(4)在接收到一個(gè)業(yè)務(wù)邏輯處理模型返回的狀態(tài)更新請(qǐng)求后,調(diào)用一個(gè)新的業(yè)務(wù)邏輯處理模型處理此請(qǐng)求。
控制器主要包括二個(gè)文件:includes/prepend.inc和includes/controller/controller.inc.prepend.inc文件被設(shè)定為自動(dòng)增加在被訪問(wèn)的文件前,因此這個(gè)文件非常適合作為控制器的主文件;Controller.inc中主要是控制器中的處理函數(shù)。這二個(gè)文件的代碼如下。
prepend.inc
?
include_once(″/action/configure/db.conf″);//數(shù)據(jù)庫(kù)連接對(duì)象
include_once(″/control/controller.inc″);//控制器
…
$actionobj=getaction($action);//獲得Action信息
if($actionobj[″model″]!=″″){
//調(diào)用model處理action請(qǐng)求信息
include_once($actionobj[″model″]);
eval(″\$modelobj=execute_″。$actionobj[″action″].″();″);
if($modelobj[″type″]==″xmldata″){//返回html
//輸出xml和xsl合成的html數(shù)據(jù)
echoxmlpraser($modelobj[″data″],$actionobj[″view″]);
}elseif($modelobj[″type″]==″state″){//請(qǐng)求更新?tīng)顟B(tài)
header(″Location:?″。$modelobj[″data″]);//交新模型處理
exit;
}
}else{//直接調(diào)用View輸出}
?
controller.inc:
?
****得actionobj的信息****
functiongetaction($action){
global$dbobj,$conn,$result_id;//數(shù)據(jù)對(duì)象,連接,結(jié)果集
//從數(shù)據(jù)庫(kù)中檢索action對(duì)象信息
$sqlstr=″select*fromt_actionwhereaction=′″。$action.″′″;
$result_id=$dbobj-exec($conn,$sqlstr);
if($dbobj-fetch_row($result_id)){
$actobj[″action″]=$action;
//action的處理模型名稱
$actobj[″model″]=$dbobj-result($result_id,″model″);
//action的視圖模板信息
$actobj[″view″]=$dbobj-result($result_id,″template″);
//其他控制參數(shù)
}else{…}
return$actobj;
}
//****解析xml和xslt****
functionphp_scheme_get_all($Processor,$Schema,$RestUri){
$url=$Schema.′:′。$RestUri;
returnfile_get_contents($url);
}
functionxmlpraser($data,$xslpath){
global$SYS_INCLUDEPATH;
$parser=xslt_create();//初始化解析對(duì)象
xslt_set_scheme_handlers($parser,array(′get_all′=
′php_sheme_get_all′));//設(shè)置處理方式
$parms[″_xml″]=″?xmlversion=\″1.0\″e(cuò)ncoding=\″gb2312\
″?″.$data;//合成xml格式數(shù)據(jù)
$parms[″_xsl″]=file_get_contents($SYS_INCLUDEPATH.
″\\″.$xslpath);//讀取xsl模板文件
$result.=xslt_process($parser,′arg:/_xml′,′arg:/_xsl′,
NULL,$parms);//合成視圖
xslt_free($parser);//釋放解析對(duì)象
return$result;
}
?
2.2.2模型層的實(shí)現(xiàn)
模型是系統(tǒng)的數(shù)據(jù)。此系統(tǒng)中模型層主要包括三部分內(nèi)容。
(1)業(yè)務(wù)邏輯處理。業(yè)務(wù)邏輯處理又可以分為二類:一類是抽象出來(lái)的業(yè)務(wù)邏輯,被封裝成一個(gè)個(gè)PHP類;另一類是對(duì)某一具體Action的邏輯處理。
(2)PHP的基礎(chǔ)類庫(kù)。此部分與業(yè)務(wù)邏輯無(wú)關(guān),描述的是對(duì)任何一類的應(yīng)用系統(tǒng)中都要使用的公共函數(shù)類,這些類可以被其他程序調(diào)用。
(3)數(shù)據(jù)輸出處理,把PHP數(shù)據(jù)轉(zhuǎn)換成XML格式輸出。
按照控制器的定義,每一個(gè)Actionname都要調(diào)用一個(gè)命名為execute_actionname()的函數(shù),這個(gè)函數(shù)會(huì)返回Action的處理結(jié)果。處理結(jié)果有二種情況:一種是返回XML格式的數(shù)據(jù);一種是返回要求系統(tǒng)更新?tīng)顟B(tài)的狀態(tài)值。一個(gè)典型的模型處理器程序結(jié)構(gòu)如下:
include_once(″/action/tool/tools.inc″);//工具系統(tǒng)的基礎(chǔ)類
functiongettoollist($toolid){//獲得工具信息
//指定要獲得的工具信息
$params=array(″toolname″,″part_no″,″quantity″);
$toolobj=newtoolinfo;//創(chuàng)建toolinfo類實(shí)例
$toolstinfo=$toolobj-GetToolListinfo($toolid,$params);
return$toolsinfo;//返回工具列表信息
}
functiongetxml($toolsinfo){//轉(zhuǎn)換工具信息為xml格式
while(list($id,$toolarray)=each($toolsinfo[″data″])){
$xmlstr.=″items″;
while(list($key,$value)=each($toolarray)){
$xmlstr.=″″.$key.″″。$value.″/″。$key.″″;
}
$xmlstr.=″/items″;
}
return$xmlstr;
}
functionexecute_tool_toollist(){//工具列表action的處理函數(shù)
$toolinfo=gettoollist($toolid);//工具信息
if($toolinfo[″state″]){//輸出xml格式數(shù)據(jù)
$rtnobj[″type″]=″xmldata″;
$rtnobj[″data″]=getxml(($toolinfo);
}else{//跳轉(zhuǎn)到錯(cuò)誤處理頁(yè)面
$rtnobj[″type″]=″state″;
$rtnobj[″data″]=″e(cuò)rrorhandle″;
}
return$rtnobj;
}
?
2.2.3視圖層的實(shí)現(xiàn)
視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫(kù)中以存儲(chǔ)的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來(lái)自由定義視圖的查詢所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。對(duì)其中所引用的基礎(chǔ)表來(lái)說(shuō),視圖的作用類似于篩選。定義視圖的篩選可以來(lái)自當(dāng)前或其它數(shù)據(jù)庫(kù)的一個(gè)或多個(gè)表,或者其它視圖。分布式查詢也可用于定義使用多個(gè)異類源數(shù)據(jù)的視圖。此系統(tǒng)即使用了XSL模板技術(shù)。系統(tǒng)中的視圖層包括二部分:一部分是放在/includes/template目錄下的XSL模板;另一部分是放在/htdocs目錄下的js和css文件。,由控制器來(lái)完成合成視圖的任務(wù)。
2.3系統(tǒng)適應(yīng)性
從整個(gè)系統(tǒng)的設(shè)計(jì)結(jié)構(gòu)可以看出,系統(tǒng)的業(yè)務(wù)邏輯和顯示是分離的:首先由網(wǎng)頁(yè)設(shè)計(jì)人員和程序員共同確定需要的數(shù)據(jù)項(xiàng)和
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度時(shí)尚消費(fèi)品代理進(jìn)口及市場(chǎng)布局合同
- 二零二五年度退休科研人員合作研發(fā)聘用合同
- 二零二五學(xué)年度學(xué)生校車(chē)安全乘車(chē)環(huán)境改善與優(yōu)化協(xié)議
- 股權(quán)代持協(xié)議書(shū)標(biāo)準(zhǔn)模板:2025年度股權(quán)置換與重組范本
- 二零二五年度校園安全責(zé)任與學(xué)生家長(zhǎng)參與合同
- 二零二五年度購(gòu)物中心日常保潔與應(yīng)急處理合同
- 三字經(jīng)中道理的故事解讀
- 旅游目的地營(yíng)銷(xiāo)與品牌形象塑造研究
- 綠化零工勞務(wù)合同
- 產(chǎn)品供應(yīng)和分銷(xiāo)合同
- 中小學(xué)領(lǐng)導(dǎo)班子包級(jí)包組包班制度
- 電網(wǎng)工程設(shè)備材料信息參考價(jià)(2024年第四季度)
- 2025年江蘇農(nóng)牧科技職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2024年湖南鐵道職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案解析word版
- 2023年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招(數(shù)學(xué))試題庫(kù)含答案解析
- 2022年中國(guó)遠(yuǎn)洋海運(yùn)集團(tuán)有限公司招聘考試題庫(kù)及答案解析
- 供應(yīng)鏈管理課件第5章供應(yīng)鏈合作伙伴選擇與評(píng)價(jià)
- 4D現(xiàn)場(chǎng)管理培訓(xùn)ppt課件(PPT 45頁(yè))
- 餐飲店面投資預(yù)算(900平方米)
- 小學(xué)生個(gè)人簡(jiǎn)歷WORD模板
- 檢驗(yàn)科危急值管理.
評(píng)論
0/150
提交評(píng)論