張文勝 陳宏
摘 要:近年來,隨著網(wǎng)絡(luò)的普及和WEB應(yīng)用需求的增加,敏捷的WEB開發(fā)的應(yīng)用成為研究領(lǐng)域的熱點之一。本文以ThinkPHP框架技術(shù)為基礎(chǔ),使用敏捷的WEB開發(fā)流程和方法,完成了新聞信息發(fā)布系統(tǒng)的整體設(shè)計和實現(xiàn)。最后,探討了未來的研究趨勢。
關(guān)鍵詞:ThinkPHP;敏捷開發(fā);WEB開發(fā)
中圖分類號:TP311 文獻標(biāo)識碼:A
Abstract:In recent years,with the increasing popularity of the network and WEB application requirements,agile development of the WEB application has become one of the hot research field.This paper is based on the ThinkPHP framework,using the WEB development process and agile methods,completed the design and implementation of information publishing system.Finally,future research trends are discussed.
Keywords:ThinkPHP;agile development;WEB development
1 引言(Introduction)
目前,隨著網(wǎng)絡(luò)的普及,網(wǎng)站和Web應(yīng)用程序開發(fā)的需求在不斷擴大,用戶體驗要求也越來越高。如果大家都是需要自我開發(fā)一套Web應(yīng)用系統(tǒng),則存在成本高、沒有技術(shù)力量,維護不方便等問題。所以,如果可以開發(fā)一套Web應(yīng)用系統(tǒng)模型,將一次性源碼交付客戶,讓客戶擁有自己的Web應(yīng)用平臺,則操作相對簡單,在功能上也可自主靈活修改,這樣就能很好的解決用戶所面臨的問題[1]。
MVC模式(Model-View-Controller)是一種應(yīng)用廣泛的開發(fā)模式,能夠解決團隊開發(fā)之間分工協(xié)作、協(xié)同配合的問題,最優(yōu)化系統(tǒng)各部件的開發(fā)效率。MVC模式將管理系統(tǒng)分為三大部件,分別為模型、視圖和控制器。這三大部件各自分離,但又相互依存,最終形成了一個容易維護、容易擴展、高效運行的管理系統(tǒng)平臺。對于后臺程序員,借助于MVC模式就可以更加專注于業(yè)務(wù)流程和功能的實現(xiàn),而不需要太多地涉及頁面與前端。這種分工協(xié)作的最終目的是提高開發(fā)效率及項目質(zhì)量[2]。
ThinkPHP框架是為了敏捷WEB應(yīng)用開發(fā)和簡化開發(fā)者應(yīng)用而設(shè)計的,是基于MVC結(jié)構(gòu)的開源PHP框架,ThinkPHP一直秉承實用簡潔的設(shè)計思想,發(fā)揮開源和社區(qū)團隊的優(yōu)勢,不斷優(yōu)化和改進,在易用性、擴展性和性能方面均有較好表現(xiàn),已經(jīng)成長為國內(nèi)領(lǐng)先和具有影響力的敏捷的WEB應(yīng)用開發(fā)框架,已被大量應(yīng)用于商業(yè)以及門戶級網(wǎng)站的開發(fā)[3]。
本文以新聞信息發(fā)布系統(tǒng)為例,給出了基于ThinkPHP模型的敏捷WEB開發(fā)的設(shè)計思想及其開發(fā)流程,并使之在目錄結(jié)構(gòu)和代碼上標(biāo)準(zhǔn)化和規(guī)范化,提高模塊的復(fù)用性,使開發(fā)者專注于業(yè)務(wù)流程的設(shè)計,減輕在編寫界面、組織代碼等重復(fù)性的工作上的負擔(dān)。
2 ThinkPHP MVC設(shè)計思想和開發(fā)流程(ThinkPHP MVC design and development process)
2.1 ThinkPHP MVC設(shè)計思想
ThinkPHP是基于MVC設(shè)計模式的,且均支持多層(multi-Layer)設(shè)計。ThinkPHP中的MVC分層大致體現(xiàn)為:
模型(Model)層:默認的模型層由Model類構(gòu)成,但是隨著項目的增大和業(yè)務(wù)體系的復(fù)雜化,單一的模型層很難解決要求,從3.1版本開始推出了多層Model的支持,設(shè)計思路很簡單,不同的模型層仍然都繼承自系統(tǒng)的Model類。
控制器(Controller)層:ThinkPHP的控制器層由核心控制器和業(yè)務(wù)控制器組成,核心控制器由系統(tǒng)內(nèi)部的App類完成,負責(zé)應(yīng)用(包括模塊和操作)的調(diào)度控制,包括HTTP請求攔截和轉(zhuǎn)發(fā)、加載配置等,業(yè)務(wù)控制器則由用戶定義的Action類完成。3.1版本開始增加了多層業(yè)務(wù)控制器的支持。
視圖(View)層:由模板和模板引擎組成,在模板中可以直接使用PHP代碼,模板引擎的設(shè)計會在后面講述,通過驅(qū)動也可以支持其他第三方的模板引擎。
在MVC三層中,ThinkPHP并不依賴M或者V,甚至可以只有C或者只有V,這個在ThinkPHP的設(shè)計里面是一個很重要的用戶體驗設(shè)計,用戶只需要定義視圖,在沒有C的情況下也能自動識別[4]。
2.2 ThinkPHP開發(fā)流程
使用ThinkPHP創(chuàng)建應(yīng)用的一般開發(fā)流程是[5]:
(1)創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表(沒有數(shù)據(jù)庫操作可略過)。
(2)項目命名并創(chuàng)建項目入口文件。
(3)完成項目配置。
(4)創(chuàng)建控制器類。
(5)創(chuàng)建模型類,如果只是簡單的模型類可以不必創(chuàng)建。
(6)創(chuàng)建模板文件。
(7)運行和調(diào)試。
2.3 ThinkPHP目錄結(jié)構(gòu)各個文件夾的含義[6]
ThinkPHP的目錄結(jié)構(gòu)非常清晰和容易部署,目錄結(jié)構(gòu)的內(nèi)容和說明如表1所示。
3 基于ThinkPHP模型的敏捷WEB開發(fā)的應(yīng)用(The application of ThinkPHP model of agile development based on WEB)
3.1 應(yīng)用程序的模型描述
首先,設(shè)計一個模型(M),模型的定義由Model類完成,該類完成了基本的CURD、ActiveRecord模式、連貫操作和統(tǒng)計查詢等。Model類位于項目目錄下面的/Lib/Model目錄。
其次,設(shè)計控制器(C),應(yīng)用控制器(核心控制器)和Action控制器都承擔(dān)了控制器的角色。核心控制器由系統(tǒng)內(nèi)部的App類完成,負責(zé)應(yīng)用(包括模塊和操作)的調(diào)度控制,包括HTTP請求攔截和轉(zhuǎn)發(fā)、加載配置等,業(yè)務(wù)控制器則由用戶定義的Action類或者其他控制器類完成。Action控制器位于項目目錄下面的/Lib/Action目錄。
最后,完成視圖設(shè)計(V),視圖主要就是指模板文件和模板引擎,模板的實現(xiàn)和框架無關(guān),可以獨立制作和預(yù)覽。模板位于項目目錄下面的/Tpl目錄。
模型調(diào)用關(guān)系描述如圖1所示。
3.2 構(gòu)建應(yīng)用程序的結(jié)構(gòu)
在使用應(yīng)用架構(gòu)創(chuàng)建應(yīng)用時,使用統(tǒng)一的命名規(guī)范和目錄結(jié)構(gòu),規(guī)定所有類文件都放至Lib目錄下。在該目錄下,可根據(jù)分別建立Action、Model、Behavior和Widget等四個子目錄。項目文件夾的命名約定見2.3節(jié),這樣就把對視圖界面、交互邏輯和數(shù)據(jù)的處理清晰地分開,便于對應(yīng)用進行管理和優(yōu)化。目錄結(jié)構(gòu)如圖2所示。
3.3 MVC各個模塊的實現(xiàn)
視圖由View類和模板文件兩部分組成。Action控制器直接和View視圖類交互,View類把控制器傳來的變量展現(xiàn)出來,而模板文件完成呈現(xiàn)的形式。
為了對模板文件更加有效地管理,Think PHP對模板文件進行目錄劃分,默認模板文件定義規(guī)則是:模板目錄\分組名\模板主題\分組名\模塊名\操作名+模板后綴。項目模板目錄是admin\Tpl,對于后臺管理模塊來說,首先需要新建Admin文件夾(模塊名),然后在該目錄下新建三個文件夾Index、Login和News,分別對應(yīng)顯示查看管理員主頁面、登錄頁面和添加新聞頁面的內(nèi)容。當(dāng)用戶調(diào)用Action文件夾各個類的對應(yīng)的相關(guān)方法時,系統(tǒng)將會調(diào)用相應(yīng)模板文件夾下的靜態(tài)網(wǎng)頁index.html,并將動態(tài)內(nèi)容輸出到模板中指定的標(biāo)記處,最后使用display方法輸出相應(yīng)的模板。
Model模型的定義是由Model類來完成,ThinkPHP對數(shù)據(jù)庫的表名和模型類的命名遵循一定的規(guī)范。首先數(shù)據(jù)庫的表名和字段全部采用小寫形式,模型類的命名規(guī)則是除去表前綴的數(shù)據(jù)表名稱,并且首字母大寫,然后加上模型類的后綴定義。
系統(tǒng)在后臺登錄和添加新聞時,填寫完表單后,需要校驗表單各項內(nèi)容,為實現(xiàn)上述功能需求,就需要自定義對應(yīng)的模型類UserModel.class.php和NewsModel.class.php。并使用D方法實現(xiàn)自動驗證與自動填充。
Action控制器對應(yīng)的文件位于項目目錄admin\Lib\Action下。框架會根據(jù)當(dāng)前的URL來分析要執(zhí)行的模塊和操作,即模型和視圖只有在定義了相應(yīng)的控制器后才能真正被使用。
在管理員管理模塊中,需要自定義IndexAction、LoginAction和NewsAction控制器類,定義規(guī)則和模型定義相同,需要注意的是控制器名稱要與視圖模板文件夾名稱保持一致。
根據(jù)項目的功能需求控制器類IndexAction中需要定義news、edit、quit和filter等方法,NewsAction中需要定義add、delete、edit、quit和update等方法,LoginAction中需要定義index、login和checklen等方法。
至此,基于ThinkPHP模型框架的新聞發(fā)布管理系統(tǒng)中后臺管理模塊的基本功能就搭建完成,前臺功能的搭建過程也大致類似。縱觀整個開發(fā)過程中,各個模塊定位清晰,分工明確,調(diào)度自然流暢,復(fù)用性和擴展好,特別對于美工基礎(chǔ)比較薄弱的開發(fā)者,可以借鑒現(xiàn)成的前端模板資源,并集成開源的百度UEditor編輯器插件,完全可以滿足用戶要求。
4 運行結(jié)果及分析(The operation results and analysis)
本文以新聞信息管理系統(tǒng)為例進行分析說明,基于ThinkPHP模型框架實現(xiàn)了新聞發(fā)布管理信息Web前端展示和后臺管理操作,系統(tǒng)前端展示如圖3所示。
開發(fā)人員可套用合適模板,使用Volist標(biāo)簽主在模板中循環(huán)輸出新聞標(biāo)題、內(nèi)容和發(fā)布時間,主要代碼如下:
后臺管理登錄如圖4所示,后臺管理主頁如圖5所示,新聞添加頁面如圖6所示。
在后應(yīng)用中,登錄信息需要格式校驗,校驗完成后,調(diào)用后臺數(shù)據(jù)庫驗證用戶名和密碼。成功后,進入后臺管理主頁,后臺會羅列每條已經(jīng)發(fā)布新聞的基本信息,管理員可以對每條信息進行修改和刪除。處理事件被綁定到每行新聞的操作圖標(biāo)上,然后通過單擊進行修改和刪除。新聞添加時,進入新聞添加頁面,添加新聞標(biāo)題和內(nèi)容即可,本系統(tǒng)集成開源的百度UEditor編輯器插件,使用在線編輯功能,方便對新聞內(nèi)容的添加和修改。
ThinkPHP框架以標(biāo)準(zhǔn)的敏捷的方式開發(fā)Web項目,提高了開發(fā)速度,降低了開發(fā)難度,使整個項目的模塊劃分和代碼編寫更加規(guī)范,前端頁面的展示借用模板更加容易實現(xiàn)和擴展,更適合多人協(xié)同工作,進行分工編寫復(fù)雜的界面和后臺。
本系統(tǒng)使用ThinkPHP開發(fā)框架來部署Web應(yīng)用,快速、簡單、門檻低,能夠短時間內(nèi)開發(fā)出不錯的有效率,安全性能高的網(wǎng)站。特別是初學(xué)者,能夠在此基礎(chǔ)上進一步的擴展,添加諸如自動填充實現(xiàn)無限級分類功能,這樣對于了解PHP語法并且要快速開發(fā)的人來說,是一個十分便捷的工具。
5 結(jié)論(Conclusion)
本文在ThinkPHP開發(fā)框架的基礎(chǔ)上,通過敏捷的開發(fā)手段,對其中所使用的關(guān)鍵技術(shù)均做了詳細介紹,并通過實際應(yīng)用給出了實現(xiàn)方法,系統(tǒng)經(jīng)過測試,性能穩(wěn)定、交互界面友好,安全性能良好,基本達到了預(yù)期的設(shè)計要求,具備較強的實用和實踐參考價值。
隨著Web技術(shù)的發(fā)展,工程化的特點日趨明顯,本文在ThinkPHP模型的敏捷Web技術(shù)的規(guī)范化、模塊化、流程化上做了一些探索,在今后的工作中,會在提供標(biāo)準(zhǔn)服務(wù)的基礎(chǔ)上,讓開發(fā)者可以根據(jù)自己的產(chǎn)品和業(yè)務(wù)特點,通過在線配置和上傳代碼的功能來擴展自定義的功能,滿中個性化需求。
參考文獻(References)
[1] 張文勝,陳宏.基于MVCS模式的組件化手機Web前端的研究與應(yīng)用[J].電子設(shè)計工程,2015,11(23):19-22.
[2] 張文勝,陳宏.企業(yè)級組態(tài)式Web前端設(shè)計方法研究與應(yīng)用[J].電子設(shè)計工程,2014,22(17):162-164.
[3] ThinkPHP3.2.3完全開發(fā)手冊[Online]Available: http://www.kancloud.cn/manual/thinkphp/1679,基礎(chǔ)部分,2015.
[4] ThinkPHP完全開發(fā)手冊[Online]Available: http://doc.thinkphp.cn/manual/development_process.html,MVC分層,2014.
[5] ThinkPHP完全開發(fā)手冊[Online]Available: http://doc.thinkphp.cn/manual/development_process.html,開發(fā)流程,2014.
[6] 王俊芳,李隱峰,王池.基于MVC模式的ThinkPHP框架研究[J].電子科技,2014,27(4):151-53.
作者簡介:
張文勝(1967-),男,碩士,工程師,講師.研究領(lǐng)域:Web前端架構(gòu),軟件架構(gòu)設(shè)計,軟件工程.
陳 宏(1977-),女,碩士,講師.研究領(lǐng)域:軟件測試,軟件架構(gòu)設(shè)計,軟件工程.