《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于MVC架構的Web應用系統設計
基于MVC架構的Web應用系統設計
黃 偉
合肥中國科學技術大學研究生院(230026)
摘要: 分析了MVC描述的軟件模型,通過一個基于PHP語言并結合XML和XSL技術的MVC架構的設計實例討論了MVC模式設計的方法。
Abstract:
Key words :

 摘   要: 分析了MVC描述的軟件模型,通過一個基于PHP語言并結合XML和XSL技術的MVC架構的設計實例討論了MVC模式設計的方法。
關鍵詞: MVC架構  控制器  視圖  模型

1  MVC描述的軟件模型
  MVC是Model-View-Controller(模型-視圖-控制器)的縮寫,它把一個應用的處理流程分成模型層、視圖層和控制層,這三層結構之間的關系如圖1所示。

  模型層(也稱業務層)用于處理程序邏輯。它的任務是管理應用程序域的行為和數據,響應來自控制層的狀態指令,把原有數據按照業務邏輯轉換成指定意義的數據提供給視圖層顯示。
  視圖層用于把表示模型數據、邏輯關系和狀態的信息以特定的形式表現在用戶界面上。視圖層的顯示信息來自模型層,同一個模型可以對應多個視圖。
        控制層用于處理用戶與軟件的交互操作。控制層通知模型和視圖做出相應的狀態改變,使模型和視圖協調工作。
2  MVC模式設計
  MVC的目的是增加代碼的重用率,減少數據表達、數據描述和應用操作的耦合度,從而提高軟件的可維護性、擴展性和靈活性。MVC模式把界面表現和邏輯控制語句強制分離,解決了頁面設計和程序開發中的工作交錯與沖突,并解決了由于商業邏輯嵌入造成程序不可重用而且很難維護的問題。
  本文設計了一個基于PHP語言、XML和XSL模板技術的MVC架構的Web應用系統。
2.1 代碼結構
  在系統中每一個頁面被定義為一個Action,可以通過網址http://servername/index.php?action=actionname來訪問頁面??刂破髦卸x了每一個Action對應的模型和視圖,它們之間的對應關系如圖2所示。

  表1為系統的基礎代碼結構,除少量的靜態頁面放在htdocs目錄下外,其余的程序都放在PHP的庫文件目錄下。

  在這個代碼結構中,模型、視圖和控制器三部分分別放置在不同目錄中。其中,視圖層包括顯示模板(XSL)和頁面操作控制(JS)二部分,模型層包括業務邏輯處理類庫(Action Class)、數據輸出處理(Action Execute)和PHP基礎類庫(PHP Class)三部分。因此,在系統中各部分的開發由不同的角色來完成,角色之間的工作交錯和沖突可以減少,使系統程序升級和維護的思路也更加明晰。
2.2 系統實現
  在系統中,客戶端瀏覽器中呈現的是系統的視圖部分,而模型和控制器則是透明的。當Web 服務器接收到客戶提交的HTTP請求后,交給服務器中的控制器來處理??刂破靼凑照埱笾械腁ction信息,從系統配置中提取此Action的映射表,并把此請求映射到相應的處理模型;處理模型進行業務邏輯處理,處理完后返回狀態更新的請求并將XML格式的數據結果給控制器;控制器根據結果選擇相應視圖模板并合成視圖返回給客戶。程序架構如圖3所示。

2.2.1 控制層的實現
  在這個系統中,控制器主要有以下四個作用。
  (1)根據Action名稱從數據庫的映射表中找到處理此Action的模型信息、視圖模板和此視圖的用戶操作控制信息。
  (2)調用模型處理Action請求。
  (3)合成業務邏輯處理返回的XML格式的數據信息和XSL視圖模板為HTML的文件,并返回給客戶端。
  (4)在接收到一個業務邏輯處理模型返回的狀態更新請求后,調用一個新的業務邏輯處理模型處理此請求。
  控制器主要包括二個文件:includes/prepend.inc和includes/controller/controller.inc。prepend.inc文件被設定為自動增加在被訪問的文件前,因此這個文件非常適合作為控制器的主文件;Controller.inc中主要是控制器中的處理函數。這二個文件的代碼如下。
prepend.inc
<?
include_once(″/action/configure/db.conf″);//數據庫連接對象
include_once(″/control/controller.inc″);//控制器

$actionobj=getaction($action);     //獲得Action信息
if($actionobj[″model″] !=″″){
                   //調用model處理action請求信息
include_once($actionobj[″model″]);
eval(″\$modelobj=execute_″.$actionobj[″action″].″( );″);
if($modelobj[″type″]==″xmldata″){//返回html
                     //輸出xml和xsl合成的html數據
    echo xmlpraser($modelobj[″data″],$actionobj[″view″]);
}else if($modelobj[″type″]==″state″){  //請求更新狀態
    header(″Location:?″.$modelobj[″data″]); //交新模型處理
    exit;
}
}else{//直接調用View輸出}
?>
controller.inc:
<?
****得actionobj的信息****
function getaction($action){
global $dbobj,$conn,$result_id;      //數據對象,連接,結果集
                  //從數據庫中檢索action對象信息
$sqlstr=″select*from t_action where action=′″.$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″);
                    //其他控制參數
}else{ … }
return $actobj;
}
                  //****解析xml和xslt****
function php_scheme_get_all($Processor,$Schema,$RestUri){
$url=$Schema .′:′. $RestUri;
return file_get_contents($url);
}
function xmlpraser($data,$xslpath){
global $SYS_INCLUDEPATH;
$parser=xslt_create( );  //初始化解析對象
xslt_set_scheme_handlers($parser,array(′get_all′=>
′php_sheme_get_all′));      //設置處理方式
$parms[″_xml″]=″<?xml version=\″1.0\″ encoding=\″gb2312\
″?>″ . $data;             //合成xml格式數據
$parms[″_xsl″]=file_get_contents($SYS_INCLUDEPATH.
″\\″ . $xslpath);         //讀取xsl模板文件
$result.=xslt_process($parser,′arg:/_xml′,′arg:/_xsl′,
NULL,$parms);        //合成視圖
xslt_free($parser);    //釋放解析對象
return $result;
}
?>
2.2.2 模型層的實現
  模型是系統的數據核心。此系統中模型層主要包括三部分內容。
  (1)業務邏輯處理。業務邏輯處理又可以分為二類:一類是抽象出來的業務邏輯,被封裝成一個個PHP類;另一類是對某一具體Action的邏輯處理。
  (2)PHP的基礎類庫。此部分與業務邏輯無關,描述的是對任何一類的應用系統中都要使用的公共函數類,這些類可以被其他程序調用。
  (3)數據輸出處理,把PHP數據轉換成XML格式輸出。
  按照控制器的定義,每一個Actionname都要調用一個命名為execute_actionname( )的函數,這個函數會返回Action的處理結果。處理結果有二種情況:一種是返回XML格式的數據;一種是返回要求系統更新狀態的狀態值。一個典型的模型處理器程序結構如下:
<?
include_once(″/action/tool/tools.inc″);  //工具系統的基礎類
function gettoollist($toolid){       //獲得工具信息
                    //指定要獲得的工具信息
$params=array(″toolname″,″part_no″,″quantity″);
$toolobj=new toolinfo;         //創建toolinfo類實例
$toolstinfo=$toolobj->GetToolListinfo($toolid,$params);
return $toolsinfo;           //返回工具列表信息
}
function getxml($toolsinfo){      //轉換工具信息為xml格式
while(list($id,$toolarray)=each($toolsinfo[″data″])){
   $xmlstr.=″<items>″;
    while(list($key,$value)=each($toolarray)){
      $xmlstr.=″<″ .$key. ″>″.$value.″</″.$key.″>″;
    }
     $xmlstr.=″</items>″;
}
return $xmlstr;
}
function execute_tool_toollist( ) {    //工具列表action的處理函數
$toolinfo=gettoollist($toolid);      //工具信息
if($toolinfo[″state″]){          //輸出xml格式數據
  $rtnobj[″type″]=″xmldata″;
  $rtnobj[″data″]=getxml(($toolinfo);
}else{                //跳轉到錯誤處理頁面
  $rtnobj[″type″]=″state″;
  $rtnobj[″data″]=″errorhandle″;
}
return $rtnobj;
}
?>
2.2.3 視圖層的實現
  視圖是系統與客戶交互的窗口。在Web應用系統中,視圖是指客戶最終看到的HTML頁面。為了使頁面具有風格統一、整齊、可配置的特點,系統一般都會采用模板技術。此系統即使用了XSL模板技術。系統中的視圖層包括二部分:一部分是放在/includes/template目錄下的XSL模板;另一部分是放在/htdocs目錄下的js和css文件。最后,由控制器來完成合成視圖的任務。
2.3 系統適應性 
  從整個系統的設計結構可以看出,系統的業務邏輯和顯示是分離的:首先由網頁設計人員和程序員共同確定需要的數據項和Action名稱,在控制器中添加此Action;之后,網頁設計人員設計各個顯示模板;程序人員完成相應的模型處理程序。這樣的設計方法有利于對系統的維護和功能擴展。
  在MVC系統中處理用戶需求的思路非常明確。視圖的修改和模型處理的修改基本上是獨立的,無論是在系統開發時期還是在系統維護時期,網頁設計人員和程序員都可以更加專注于自己的任務。系統中的模型可以是自包含的,由于與控制器和視圖相分離,所以很容易改變程序的數據層和業務規則。例如把數據庫從Mysql移植到Oracle上只需改變數據庫連接模型即可;而把界面顯示從HTML改為Flash或WAP只需改變視圖顯示和相應控制器即可。一旦正確地實現了模型,視圖將會正確地加以顯示。這樣,系統維護的成本和項目的開發風險都被大大降低。
3  結束語
  MVC設計思想中的三部分是相互獨立的,既可以通過不同的技術實現,也可以運行在不同的基礎平臺上。隨著更多新技術的出現,還可以創造出更多的應用方式。所以MVC設計模式的確是一個創建優秀軟件的途徑。
  本文所描述的只是MVC應用系統開發的一個基礎模式。模型和視圖嚴格分離的模式相對混合模式,對開發和設計人員的要求要高一些,但更容易進行錯誤控制。此外,在實際的應用中,開發者還要結合各應用項目的業務需要進行詳細的設計規劃,認真考慮應用的額外復雜性。只有把這些想法融進到架構中,才能增加應用的可拓展性。只有把握這一點,MVC模式才會使得應用系統更加健壯、更加靈活和更容易擴展。
參考文獻
1   Kotek B.MVC design pattern brings about better organisation and code reuse.http://builder.com.com/5100-6386-1049862.html,2002
2   龔赤兵.如何合理利用MVC設計模式運用到開發Java應 用程序.http://tech.163.com/tm/030622/ 030622_99290. html,2003
3   Gamma E著,李英軍譯.設計模式:可復用面向對象軟件的基礎.北京:機械工業出版社,2000
 

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲视频在线一区观看| 韩国精品在线观看| 99ri日韩精品视频| 美女诱惑黄网站一区| 久久精品一区蜜桃臀影院| 欧美午夜免费电影| 国内成+人亚洲| 午夜精品福利在线观看| 欧美日韩国产不卡在线看| 欧美三级电影精品| 亚洲精品影视在线观看| 欧美久久九九| 99亚洲伊人久久精品影院红桃| 亚洲精品一区久久久久久| 毛片精品免费在线观看| 91久久极品少妇xxxxⅹ软件| 欧美国产日韩一区二区在线观看| 国产午夜精品一区二区三区视频| 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美视频在线播放| 国产综合网站| 国产日韩欧美制服另类| 亚洲欧美国产va在线影院| 亚洲制服av| 国产精品一区二区在线| 午夜精品福利视频| 亚洲免费视频一区二区| 亚洲欧美日韩国产| 欧美一级大片在线免费观看| 国产亚洲精品福利| 免费在线看成人av| 在线成人激情视频| 99精品欧美一区二区三区综合在线| 一区二区三区|亚洲午夜| 久久精品视频在线看| 国产日韩在线一区二区三区| 日韩午夜av| 99视频一区二区| 91久久精品www人人做人人爽| 欧美韩国日本综合| 亚洲国产精品一区二区久| 一区二区三区日韩精品| 亚洲视频久久| 亚洲精品一区二区三区樱花| 黑人一区二区三区四区五区| 欧美午夜精品久久久久久孕妇| 性高湖久久久久久久久| 亚洲国产精品成人综合色在线婷婷| 久久中文欧美| 亚洲国产日韩欧美在线图片| 精品不卡一区二区三区| 久久综合九色九九| 亚洲国产精品一区二区www在线| 韩国av一区二区三区在线观看| 91久久精品国产91久久性色tv| 在线观看视频免费一区二区三区| 小嫩嫩精品导航| 久久视频在线视频| 欧美日韩播放| 亚洲欧洲精品一区二区三区波多野1战4| 国产精品中文字幕在线观看| 亚洲精品在线观| 精品99一区二区| 久久午夜羞羞影院免费观看| 亚洲风情亚aⅴ在线发布| 国产亚洲欧美一区二区三区| 黄色成人av网站| 这里只有精品视频| 欧美一区三区三区高中清蜜桃| 欧美日韩成人免费| 99re6这里只有精品视频在线观看| 久久综合中文| 国产精品久久网| 欧美噜噜久久久xxx| 欧美一区午夜视频在线观看| 亚洲一区二区视频| 国模精品一区二区三区色天香| 一本一本久久| 亚洲色图自拍| 一区在线视频观看| 这里只有精品视频在线| 亚洲欧洲午夜| 国产精品视频你懂的| 久久国产一区二区| 欧美一区二区视频在线观看2020| 亚洲婷婷综合久久一本伊一区| 免费观看一区| 亚洲精华国产欧美| 另类av一区二区| 欧美第一黄色网| 久久久噜噜噜久久中文字幕色伊伊| 激情视频一区二区| 国产精品日韩电影| 香蕉久久久久久久av网站| 久久综合一区| 久久久久久黄| 一区二区三区欧美成人| 欧美日韩xxxxx| 亚洲第一页在线| 欧美日韩久久不卡| 亚洲精品色婷婷福利天堂| 国产精品任我爽爆在线播放| 亚洲日本电影在线| 欧美日韩在线视频一区二区| 亚洲一区成人| 欧美成年人视频网站欧美| 久久久久久久一区二区三区| 亚洲久色影视| 欧美日韩高清区| 亚洲风情在线资源站| 亚洲视频www| 亚洲国产另类 国产精品国产免费| 欧美亚洲一区在线| 伊人成年综合电影网| 国产精品一二三| 亚洲精品综合精品自拍| 国产亚洲电影| 国产一区二区三区观看| 亚洲一区二区在线看| 国产日韩欧美综合一区| 亚洲欧美日韩国产| 欧美日韩国产黄| 在线观看中文字幕不卡| 亚洲欧美日韩一区二区三区在线| 欧美日韩中文字幕综合视频| 黑人操亚洲美女惩罚| 久久综合亚洲社区| 欧美激情第二页| 欧美一区二区三区四区视频| 午夜精品99久久免费| 欧美日韩精品欧美日韩精品| 91久久精品一区二区三区| 国产日韩欧美日韩| 欧美高清视频| 久久成人免费日本黄色| 亚洲黄网站黄| 极品少妇一区二区三区精品视频| 精品成人国产在线观看男人呻吟| 国产精品xxxav免费视频| 久久精品视频免费播放| 欧美日韩视频| 午夜精品久久久久久99热| 欧美日韩亚洲91| 亚洲美女视频在线观看| 亚洲一区二区三区成人在线视频精品| 农村妇女精品| 欧美日韩精品一区二区在线播放| 国产日韩欧美精品综合| 一卡二卡3卡四卡高清精品视频| 亚洲一区二区在| 免费h精品视频在线播放| 久久久久国产一区二区三区四区| 欧美一区二区三区日韩视频| 国产精品第2页| 在线免费高清一区二区三区| 国产精品免费网站| 国产喷白浆一区二区三区| 久久久久久9999| 亚洲国产综合在线看不卡| 亚洲成人在线观看视频| 欧美激情综合色综合啪啪| 亚洲欧美日韩国产中文在线| 久久久另类综合| 亚洲剧情一区二区| 狠狠色丁香婷婷综合久久片| 欧美亚洲色图校园春色| 欧美日韩国产综合网| 久久精品一本久久99精品| 激情成人综合网| 亚洲经典三级| 欧美日韩999| 欧美极品在线播放| 欧美亚洲视频在线看网址| 欧美一级久久| 亚洲欧洲中文日韩久久av乱码| 欧美在线视频在线播放完整版免费观看| 国产麻豆综合| 国产日韩久久| 欧美主播一区二区三区| 国产精品久久久爽爽爽麻豆色哟哟| 久久爱www| 狠狠色狠狠色综合日日91app| 好看的av在线不卡观看| 亚洲天堂男人| 亚洲线精品一区二区三区八戒| 亚洲国产精品第一区二区| 亚洲激情专区| 久久精品国产欧美激情| 黄色成人在线网址| 国产精品二区三区四区| 亚洲国产精品一区二区第一页| 99精品国产99久久久久久福利| 国产农村妇女毛片精品久久莱园子| 亚洲福利在线观看| 中日韩美女免费视频网址在线观看| 国产精品视频男人的天堂| 国产精品综合| 欧美日韩福利| 亚洲自拍偷拍网址| 国产精品一区一区三区| 久久久久一区二区三区| 亚洲国内在线| 亚洲一区在线播放| 欧美在线播放一区二区| 亚洲国产精品精华液2区45| 老司机精品视频网站| 亚洲天堂网在线观看| 久久男人av资源网站| 欧美成人精品一区二区三区| 欧美日韩中文字幕精品| 亚洲天堂av电影| 亚洲国产精品成人va在线观看| 韩日成人av| 国产精品www网站| 午夜欧美理论片| 国产色婷婷国产综合在线理论片a| 国外成人在线视频| 欧美性大战久久久久久久| 亚洲欧美日韩中文在线制服| 久久久人成影片一区二区三区| 欧美亚洲成人精品| 欧美一区二区视频网站| 久久成人综合网| 精品1区2区3区4区| 中文av字幕一区| 亚洲免费婷婷| 欧美视频在线观看 亚洲欧| 国产精品福利在线观看| 久久久久久自在自线| 国产欧美一区二区三区国产幕精品| 欧美成人黑人xx视频免费观看| 久久九九久精品国产免费直播| 国产精品欧美一区喷水| 香蕉久久夜色精品国产使用方法| 免费一级欧美在线大片| 欧美日韩国产一区二区三区| 在线观看视频日韩| 欧美亚州韩日在线看免费版国语版| 久久久精品国产99久久精品芒果| 在线激情影院一区| 日韩五码在线| 欧美日韩亚洲一区二区三区在线| 国产精品久久久一区麻豆最新章节| 米奇777超碰欧美日韩亚洲| 久久久www成人免费无遮挡大片| 欧美激情综合色综合啪啪| 欧美日韩八区| 91久久综合| 国产精品乱码一区二区三区| 国产一区二区三区在线观看免费视频| 国产精品va在线播放| 久久综合九色99| 欧美日韩国产一级| 在线精品视频一区二区| 国产精品男人爽免费视频1| 亚洲精品欧洲精品| 亚洲精品乱码久久久久久| 亚洲神马久久| 国产精品日韩一区二区三区| 欧美性猛片xxxx免费看久爱| 99视频在线精品国自产拍免费观看| 一本大道久久精品懂色aⅴ| 亚洲裸体在线观看| 亚洲高清三级视频| 欧美日韩成人网| 午夜精品久久久99热福利| 国产毛片一区| 欧美三级特黄| 羞羞漫画18久久大片| 国产欧美精品一区二区三区介绍| 国产精品稀缺呦系列在线| 欧美成人免费小视频| 久久精品亚洲乱码伦伦中文| 亚洲色图制服丝袜| 国产视频一区在线观看一区免费| 欧美网站在线观看| 亚洲欧美一级二级三级| 中国成人亚色综合网站| 午夜精品久久久久影视| 亚洲老板91色精品久久| 亚洲国产精品第一区二区| 国内精品**久久毛片app| 国产精品久久久久久影视| 亚洲午夜影视影院在线观看| 欧美亚州在线观看| 亚洲欧美综合网| 亚洲成色www久久网站| 欧美视频在线观看免费网址| 欧美激情女人20p| 欧美午夜不卡| 99re6热只有精品免费观看| 欧美成人午夜视频| 亚洲午夜精品视频| 欧美色视频日本高清在线观看| 久久精品一区中文字幕| 亚洲欧美另类久久久精品2019| 欧美一区二区三区喷汁尤物| 国产欧美精品| 久久久久久久欧美精品| 欧美国产视频日韩| 女同一区二区| 亚洲欧美日韩一区二区三区在线| 欧美激情91| 久久精视频免费在线久久完整在线看| 中文在线资源观看网站视频免费不卡| 久久先锋资源| 欧美视频在线观看一区| 99成人在线| 99视频一区二区三区| 好看不卡的中文字幕| 亚洲小说区图片区| 久久久久久久久久久一区| 国产一区二区三区的电影| 久久精品一区二区国产| 亚洲国产欧美日韩精品| 一本色道久久综合| 国产情人综合久久777777| 欧美经典一区二区| 悠悠资源网久久精品| 黄色免费成人| 永久91嫩草亚洲精品人人| 亚洲国产一区二区三区青草影视| 亚洲区在线播放| 亚洲国产一区二区三区青草影视| 亚洲精品一区二区三区av| 欧美日韩一区二区在线观看视频| 欧美一级久久久久久久大片| 国产麻豆午夜三级精品|