亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        PHP開(kāi)發(fā)框架關(guān)鍵技術(shù)分析

        2012-12-31 00:00:00胥立崔偉黃林

        摘要:本文在分析主流Web架構(gòu)的基礎(chǔ)上,討論了PHP開(kāi)發(fā)框架涉及到的幾種主要技術(shù):MVC設(shè)計(jì)模式、模板解析引擎和數(shù)據(jù)訪問(wèn)層及其在PHP中實(shí)現(xiàn)的主流方式和優(yōu)缺點(diǎn),給出了基于被動(dòng)MVC、模板解析技術(shù)和Table Data Gateway模式的數(shù)據(jù)訪問(wèn)層來(lái)實(shí)現(xiàn)輕量級(jí)的PHP開(kāi)發(fā)框架的解決方案。

        關(guān)鍵詞:MVC;模板解析引擎;數(shù)據(jù)訪問(wèn)層;PHP

        中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 20-0000-02

        1 引言

        PHP是在服務(wù)器端執(zhí)行的腳本語(yǔ)言,具有簡(jiǎn)單易用、執(zhí)行效率高和跨平臺(tái)性好等優(yōu)點(diǎn),是目前最受歡迎的Web開(kāi)發(fā)語(yǔ)言之一。然而,由于PHP5之前的PHP版本對(duì)面向?qū)ο笾С植煌晟疲瑢?dǎo)致PHP的開(kāi)發(fā)框架研究從PHP5發(fā)布后才逐漸展開(kāi)、在發(fā)展過(guò)程中又受到Structs和ROR框架的嚴(yán)重影響,沒(méi)有充分考慮PHP語(yǔ)言的特點(diǎn),造成在PHP領(lǐng)域,框架的普及情況遠(yuǎn)遠(yuǎn)不如Java領(lǐng)域。PHP框架的研究首先要解決的是采用何種Web架構(gòu)的問(wèn)題:

        2 Web開(kāi)發(fā)架構(gòu)

        簡(jiǎn)單的說(shuō),Web開(kāi)發(fā)實(shí)際上是通過(guò)將HTTP請(qǐng)求發(fā)送給服務(wù)器端腳本,通過(guò)服務(wù)器端腳本對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)管理。Web架構(gòu)即是Web系統(tǒng)中服務(wù)器腳本以及HTTP請(qǐng)求的組織形式。目前流行的Web架構(gòu)有以下三種:2.1 基于文件/參數(shù)。傳統(tǒng)的Web系統(tǒng)中,服務(wù)器腳本根據(jù)功能不同分別存儲(chǔ)在不同的目錄中。服務(wù)器腳本的路徑與URL地址相對(duì)應(yīng)。HTTP請(qǐng)求通過(guò)URL直接指向某個(gè)服務(wù)器腳本,并在URL后附上特定的參數(shù),以提供腳本執(zhí)行所需的數(shù)據(jù)。腳本article.php執(zhí)行完畢后將執(zhí)行結(jié)果響應(yīng)給用戶。這種是一種面向過(guò)程的開(kāi)發(fā)方式,較為簡(jiǎn)單直接。在小型的Web系統(tǒng)中應(yīng)用較廣泛。但由于在URL中附加參數(shù),因此基于文件/參數(shù)的方式不利于搜索引擎收錄,同時(shí)各文件相對(duì)獨(dú)立的處理HTTP請(qǐng)求,因此也難以實(shí)現(xiàn)系統(tǒng)的集中控制。2.2 基于控制器/動(dòng)作。隨著面向?qū)ο蟮某墒?,Web系統(tǒng)逐漸引入基于控制器/動(dòng)作的開(kāi)發(fā)方式。這種方式通常使用一個(gè)路由模塊解析HTTP請(qǐng)求,并調(diào)用適當(dāng)?shù)目刂破鳎ɑ蚩刂破髦械哪骋粋€(gè)動(dòng)作)對(duì)請(qǐng)求進(jìn)行處理。MVC設(shè)計(jì)模式是基于控制器/動(dòng)作的一種典型實(shí)現(xiàn)。與基于文件的方式一樣,基于控制器/動(dòng)作的架構(gòu)也是建立在請(qǐng)求/響應(yīng)驅(qū)動(dòng)的基礎(chǔ)上。2.3 基于組件/事件?;诮M件/時(shí)間的Web系統(tǒng)與桌面應(yīng)用程序相似,通常將Web系統(tǒng)分為多個(gè)組件,各組件可以觸發(fā)特定的事件并由事件處理器處理。這樣就可以將HTTP請(qǐng)求抽象后映射到事件上。.NET是典型的基于組件/事件的Web框架。其代碼重用能力很強(qiáng),開(kāi)發(fā)速度也很高。但這種方式往往要求完善的控件支持和強(qiáng)大的IDE開(kāi)發(fā)環(huán)境。在缺乏這兩個(gè)條件時(shí),其優(yōu)勢(shì)難以發(fā)揮。

        3 PHP與MVC模式

        3.1 在PHP中實(shí)現(xiàn)MVC的特點(diǎn)。MVC模式通過(guò)分離數(shù)據(jù)、邏輯和顯示,將Web系統(tǒng)中的數(shù)據(jù)處理、流程控制和數(shù)據(jù)展示強(qiáng)制性的分為模型、控制器和視圖三大部分。三者通過(guò)控制器結(jié)合在一起。從而從根本上避免了傳統(tǒng)的Web開(kāi)發(fā)方式中存在的顯示、邏輯和數(shù)據(jù)相互纏繞的問(wèn)題,使得程序結(jié)構(gòu)清晰而靈活[2]。MVC模式要求在跨頁(yè)面的腳本中實(shí)現(xiàn)模型和控制器互相通信。然而由于PHP對(duì)象在頁(yè)面執(zhí)行完畢后即被回收,因此PHP對(duì)象無(wú)法跨頁(yè)面存在,傳統(tǒng)的MVC架構(gòu)在PHP上無(wú)法完全實(shí)現(xiàn)。通常解決方案是在回收前將對(duì)象存入數(shù)據(jù)庫(kù)或SESSION中,需要時(shí)在從數(shù)據(jù)庫(kù)或SESSION中重建對(duì)象。這種方式由于需要頻繁讀寫數(shù)據(jù)庫(kù),顯然效率較為低下?;赑HP對(duì)象無(wú)法跨頁(yè)面存在的現(xiàn)狀,在PHP框架中使用被動(dòng)MVC模式更為合理。在被動(dòng)MVC中,模型以普通對(duì)象的形式存在,與MVC結(jié)構(gòu)的其他部分沒(méi)有關(guān)聯(lián)。這樣既可避免對(duì)象跨頁(yè)面的問(wèn)題,避免了MVC模式帶來(lái)的效率下降。3.2 視圖層。Web項(xiàng)目擴(kuò)大帶來(lái)的眾多問(wèn)題中,前端設(shè)計(jì)團(tuán)隊(duì)與程序設(shè)計(jì)團(tuán)隊(duì)的協(xié)作、維護(hù)和擴(kuò)展難度的控制是兩大難點(diǎn)。分離頁(yè)面設(shè)計(jì)與程序邏輯是最有效的解決方案[3]。在PHP Web開(kāi)發(fā)中,通常采用模板技術(shù)分離顯示和邏輯。對(duì)應(yīng)于MVC,模板解析引擎通常處于視圖層。模板解析引擎提供相對(duì)簡(jiǎn)單的模板語(yǔ)言[4],以支持前端設(shè)計(jì)人員編寫HTML模板。模板解析引擎可以講HTML模板編譯成PHP腳本后直接運(yùn)行??偟膩?lái)說(shuō),PHP框架的視圖層通常采用類似Smarty的模板解析引擎驅(qū)動(dòng),以相對(duì)簡(jiǎn)潔的模板語(yǔ)言或直接采用PHP語(yǔ)言在模板中實(shí)現(xiàn)顯示邏輯,從而實(shí)現(xiàn)業(yè)務(wù)邏輯和前端展示的分離。3.3 數(shù)據(jù)訪問(wèn)層。開(kāi)發(fā)框架要解決的另一個(gè)主要問(wèn)題是在系統(tǒng)中將業(yè)務(wù)邏輯和數(shù)據(jù)相互分離。通常是使用數(shù)據(jù)訪問(wèn)層將程序與數(shù)據(jù)庫(kù)分離。數(shù)據(jù)訪問(wèn)層一般采用數(shù)據(jù)關(guān)系映射(ORM)實(shí)現(xiàn)邏輯和數(shù)據(jù)的分離。ORM使用元數(shù)據(jù)描述對(duì)象和數(shù)據(jù)庫(kù)之間的關(guān)系,并映射到數(shù)據(jù)庫(kù)中[5]。由于程序?qū)ο蠛完P(guān)系數(shù)據(jù)庫(kù)的映射較為復(fù)雜,因此會(huì)造成比較嚴(yán)重的效率降低。從PHP5開(kāi)始,ORM逐漸被引入到PHP開(kāi)發(fā)框架的設(shè)計(jì)中。但現(xiàn)有的PHP ORM項(xiàng)目雖然都基本實(shí)現(xiàn)了對(duì)象關(guān)系映射,卻普遍存在結(jié)構(gòu)復(fù)雜、效率低下的缺陷。

        為降低數(shù)據(jù)訪問(wèn)層的復(fù)雜性,在PHP框架設(shè)計(jì)中活動(dòng)記錄模式(ActiveRecord)逐漸開(kāi)始流行。ActiveRecord將每一條數(shù)據(jù)記錄都包裝為一個(gè)對(duì)象實(shí)例,這可以極大的提高數(shù)據(jù)庫(kù)相關(guān)程序的開(kāi)發(fā)速度。然而,這種方式在處理關(guān)聯(lián)表時(shí),即使只提取一條記錄,與之關(guān)聯(lián)的所有其他記錄均會(huì)被包裝為對(duì)象實(shí)例,這將會(huì)造成效率的急劇下降;對(duì)于需要頻繁更新數(shù)據(jù)的場(chǎng)景,由于所有的數(shù)據(jù)均需被封裝為對(duì)象,更新對(duì)象屬性后將對(duì)象存入數(shù)據(jù)庫(kù)才能完成數(shù)據(jù)更新。顯然,在數(shù)據(jù)訪問(wèn)層中使用活動(dòng)記錄模式的效率仍不理想。

        對(duì)于輕量級(jí)的PHP框架,對(duì)數(shù)據(jù)庫(kù)的操作跟適合采用更簡(jiǎn)化的數(shù)據(jù)庫(kù)訪問(wèn)層方案。與活動(dòng)記錄模式相比,表數(shù)據(jù)入口(Table Data Gateway)模式僅對(duì)數(shù)據(jù)表實(shí)現(xiàn)封裝,而不是對(duì)封裝每一個(gè)記錄行。與PHP強(qiáng)大的關(guān)聯(lián)數(shù)組相結(jié)合,表數(shù)據(jù)入口可以高效、靈活地操作大量數(shù)據(jù)。由于不對(duì)記錄進(jìn)行封裝,因此表數(shù)據(jù)入口操作的是純數(shù)據(jù),而非封裝了數(shù)據(jù)的對(duì)象。表數(shù)據(jù)入口模式可直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,這就決定了表數(shù)據(jù)入口模式具有很高的數(shù)據(jù)操作效率。

        相對(duì)于 Active Record 模式,Table Data Gateway 模式在數(shù)據(jù)表層面上封裝數(shù)據(jù)操作,更為簡(jiǎn)潔清晰,適合在輕量級(jí)的PHP框架中使用;由于復(fù)雜性降低,也可以大大降低用戶的學(xué)習(xí)成本;表數(shù)據(jù)入口不封裝記錄,因此可以直接操作數(shù)據(jù)庫(kù),且表數(shù)據(jù)入口模式中的數(shù)據(jù)以數(shù)組的形式保存,利用PHP關(guān)聯(lián)數(shù)組的優(yōu)勢(shì),執(zhí)行效率比活動(dòng)記錄模式高得多??偟膩?lái)說(shuō),輕量級(jí)PHP開(kāi)發(fā)框架的數(shù)據(jù)訪問(wèn)層使用表數(shù)據(jù)入口模式實(shí)現(xiàn),執(zhí)行效率更高、學(xué)習(xí)難度更低。

        4 總結(jié)

        總之,隨著PHP語(yǔ)言的發(fā)展,尤其是PHP5在面向?qū)ο笾С稚系木薮箫w躍,使得在PHP上實(shí)現(xiàn)MVC模式成為可能,但PHP語(yǔ)言的固有缺陷決定了完全的MVC模式在PHP上的效率較低且不易實(shí)現(xiàn)。較好的解決方案是基于被動(dòng)MVC、模板解析技術(shù)和Table Data Gateway模式的數(shù)據(jù)訪問(wèn)層來(lái)實(shí)現(xiàn)輕量級(jí)的PHP開(kāi)發(fā)框架。

        參考文獻(xiàn):

        [1]賈廣宇.MVC設(shè)計(jì)模式下Web開(kāi)發(fā)框架的研究與應(yīng)用[D].大連:大連海事大學(xué),2006.

        [2]任中方等.MVC模式研究的綜述[J].計(jì)算機(jī)應(yīng)用研究.2004.10:1-4.

        [3]曾楠等.基于MVC模式的嵌入式Web設(shè)計(jì)方法[J].廈門大學(xué)學(xué)報(bào).2006.2:196-198.

        [4]仝戈,張武裝.Smarty在基于MVC框架的Web應(yīng)用程序開(kāi)發(fā)中的應(yīng)用[J].科技信息.2009.31:839-840.

        [5]陶勇,李曉軍.Hibernate ORM最佳實(shí)踐[M].北京:清華大學(xué)出版社:2007.22-25.

        av手机在线观看不卡| 蜜桃在线播放免费一区二区三区| 久九九久视频精品网站| 激情视频在线观看好大| 激情五月婷婷六月俺也去| 日韩人妻系列在线观看| 99精品国产一区二区三区不卡| 欧美性受xxxx黑人xyx性爽| jiZZ国产在线女人水多| 免费国产一区二区视频| 337p日本欧洲亚洲大胆色噜噜 | 日韩精品一区二区三区免费视频 | 白浆国产精品一区二区| 伊人久久大香线蕉亚洲五月天| 亚洲天堂中文| 久久精品国产福利亚洲av| 日本真人添下面视频免费| 久热综合在线亚洲精品| 日韩在线不卡一区在线观看| 国产一区二区三区不卡视频| 国产黄大片在线观看| 无码人妻丰满熟妇精品区| 婷婷精品国产亚洲av| 青青草国产手机观看视频| 精品国产一区二区三区香蕉| 亚洲电影中文字幕| av人妻在线一区二区三区| 私人vps一夜爽毛片免费| 成年男女免费视频网站| 日本中出熟女一区二区| 国产91在线播放九色快色| av色综合久久天堂av色综合在| 久久亚洲sm情趣捆绑调教| 一亚洲一区二区中文字幕| av影院在线免费观看不卡| 成人片黄网站色大片免费观看cn| 亚欧乱色束缚一区二区三区| 中文字幕一区二区三区日日骚| 超碰人人超碰人人| 国内精品视频一区二区三区| 亚洲人妻有码中文字幕|