版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、DPTT介绍PHPP为什么么在主流流的应用用中总是是那么不不出色,总总是不如如.Neet/JJavaa,就是是因为在在PHP处理大大型应用用的时候候,那些些不完整整的面向向对象机机制、数数据库处处理的单单一,不不通用性性等等,影影响了PHP做大型型应用。那那么,如如何来改改变这个个状况呢呢?当然然就是需需要引进进一些新新的设计计方法,把PHP中不健全的面向对象机制完整起来,进行更好的PHP大中型应用的开发。从Jaava过来的MVC模式非非常流行,而且已已经有部部分已经经引伸进进了PHHP领域,设设计模式式的引进进,就是是为了更更好的控控制项目目开发。今今天我要要说一种种设计模模式,类类似于
2、MVC,它叫DPT模式。其其实有时时候我也也觉得有有点象Javva里面的DAOO(Daata Acccesss Obbjecct),不过DAO是夹在在业务逻逻辑层和和数据库库资源层层之间的的,而DPT更多的的是把业业务逻辑辑也封装装在类里里,和DAO层在相相同的内内容中。D Daata,数据据收集层层P Phhp,PHP数据调调用层T Teempllatee,模板板层首先,我我们要对对它进行行简单的的了解。Datta,就就是我们的数据层层,它不不是数据据库抽象象类,而而是通过过数据库库接口,执执行一些些SQL,把数据据获取的的过程,一一般把这这种操作作封装在在类里面面,就形形成了我我们的数数据
3、收集集层。Phpp,就是是对我们们收集的的数据进进行整理理,规划划,同时时解析模模板进行行数据的的显示。Temmplaate,模板板层,就就是我们们的HTMML页,里里面不包包含任何何PHP代码,只只有模板板标签的的内容,通通过它来来控制数数据在页页面中有有格式的的显示。我们这这里三层层中,每每一层都都是鼓励励由一个个人来开开发,然然后通过过PHPPDocc之类的的工具,把把源代码码中的API生成文文档,由由P层的人人进行调调用。那么,在在实际的的项目开发中,它它是怎么么运作的的呢,我我们又如如何把这这种设计计模式引引进我们们的项目目中呢?我们下下面将运运用一个个实际的的项目来来讲解DPT模式
4、。阅阅读一下下内容必必须具备备基本的的PHPP4的面向向对象编编程、数数据库抽抽象类、模模板等知知识。我们目目前为了了加速PHP的开发发,都使使用PHP封装了了部分功功能,比比如数据据库操作作抽象类类,模板板类等等等,这些些都是为为了开发发复杂应应用而应应运而生生的。目目前比较较主流的的数据库库抽象类类有phpplibb dbb、PEAAR:DB、ADOODB等等,模模板处理理类有phpplibb teempllatee、smaartTTempplatte、Smaartyy等等。本本文中都是使用PHPP Grroupp推荐的的产品,数数据口抽抽象类使使用PEAAR:DB,模板板处理类类使用Sm
5、aartyy,如果果对这两两个类库库不熟悉悉的读者者,请参参考文章章后面的的链接。二、项项目体系系结构下面我我们来构构建我们们基于DPT模式的PHP应用。(以以下部分分内容参参考MVC模式、类类封装还还是黑客客代码)文件目录结结构(只只涉及到到关键的的目录)class 类库,包含所有的数据收集层template 模板文件存放目录include 常用库,包括PEAR、Smarty等类库,同时还有自己定义的基本函数config.inc.php 基本配置文件,包括数据库配置,其他基本信息配置security.inc.php 安全处理页,主要多传递的变量进行处理init.inc.phperror.ph
6、p 错误处理页 claass目录中中存放了了我们数数据收集集层中的的内容,一一般的建建议是每每个类文文件只是是针对一一个表进进行操作作,比如如cmssMesssagge.cclasss.pphp,那么么这个类类就是属属于功能能CMS里面的的,只负负责操作作Messsagge这个表表。所有有的数据据库交互互和操作作都是封封装在类类里的,在P层不允许出现任何直接操作数据库的语句。temmplaate目录中存放了我我们的网网页模板板,模板板中都是是使用Smaartyy标签进进行排列列的,同同时,在在模板中中,都是是建议使使用JSCSS来控制制页面,模模板中只只有DIV标签来来简单的的排版,这这样,非
7、非常利于于网站改改版和更更换皮肤肤。inccludde目录就就是对常常用文件件的包含含,比如如PEAAR:DB类、Smaartyy类库文文件等。connfigg.innc.pphp就是基基本的配配置文件件,包括括数据库库、基本本常量等等等,seccuriity.incc.phhp是安全全处理页页,我们们这里主主要是做做一个变变量的安安全检查查,下面面内容我我们将仔仔细介绍绍。iniit.iinc.phpp是一个个初始化化操作的的页面,包包括初始化数据据库链接接,实例例化模板板处理类类等等操操作,errror.phpp是错误误信息处处理页,所所有的错错误信息息通过URL编码后后转到该该页。三、项
8、项目基本本配置代代码关键页页代码实实例:/* * cconffig.incc.phhp * 配置文文件*/* 数据库库配置 */deffinee(DDB_HHOSTT, loocallhosst); /数据库库主机ddefiine(DBB_USSER, rooot); /数据库库链接用用户deefinne(DB_PASSS, ); /连接密密码deefinne(DB_NAMEE, cmms); /默认数数据库ddefiine(DBB_POORT, 33006); /数据库库端口ddefiine(DBB_TYYPE, myssql); /数据库库类型ddefiine(DBB_OPPT, 11);
9、 /是否长长期链接接/* 模板信信息配置置 */deffinee(TTPL_TEMMPLAATE_DIRR, ./temmplaate/); /模板目目录deefinne(TPLL_COOMPIILE_DIRR, ./temmplaate/temmplaatess_c/); /模板编编译目录deffinee(TTPL_CONNFIGGS_DDIR, ./ttempplatte/cconffigss/); /模板配配置文件件目录ddefiine(TPPL_CCACHHE_DDIR, ./temmplaate/cacche/); /模板缓缓存目录录deffinee(TTPL_LIFFTTIIME,
10、 1); /缓存时时间deefinne(TPLL_CAACHEEINGG, ttruee); /是否缓缓存deefinne(TPLL_LEEFT_DELLIMIITERR, ); /左边界界符deefinne(TPPL_RRIGHHT_DDELIIMITTER, ); /右边界界符/* 网站路路径配置置 */deffinee(RROOTT_PAATH, ddirnnamee(_FILLE_); /网站所所在根目目录deefinne(URLL_PAATH, ddirnnamee($_SERRVERRPHHP_SSELFF); /网站URL地址路路径deefinne(DB_PATTH, ROOOT
11、_PATTH./inncluude/db); /PEAAR:DB目录deefinne(TPLL_PAATH, RROOTT_PAATH./iinclludee/smmartty); /SSmarrty目录/* seecurrityy.innc.pphp * 安全过过滤文件件*/* 过滤规规则 */$arrr_ffilttratte = arrrayy(, , );/* 过滤函函数 */funnctiion varr_fiiltrratee($vvar) gglobbal $arrr_ffilttratte; forreacch ($arrr_ffilttratte aas $vallue) i
12、if (ereegi($vaar, $vaalue) rretuurn truue; reeturrn ffalsse; /* 获取取不同版版本下的的GET和POSST数组 */if (phhpveersiion() 44.1.0) $geet = &$HTTTP_GGET_VARRS; $poost = &$HTTTP_POSST_VVARSS; elsse $gget = &$_GGET; $ppostt = &$_POSST;/* 检查GET变量 */if (coount($geet) forreacch ($poost as $geet_vvar) iff (vvar_filltraa
13、te($geet_vvar) exiit(Commmitt geet pparaametter fallsitty); /* 检查POSST变量 */if (coountt($ppostt) fforeeachh ($posst aas $posst_vvar) iff (vvar_filltraate($poost_varr) exxit(Coommiit ppostt paarammeteer ffalssityy); 其实,以以上过滤滤的方法法也不是是最好的的,建议议参考我我的另两两篇防注注入文章章获取更更好的方方法,链链接参考考附录。/* errrorr.phhp* 错误处处理页面面*
14、/if (!iisseet($gettmssg) exiit(Nott coommiit pparaametter);echho Errror Messsagge: . $geetmmsg;eccho 返回上上一页;就是一一些错误误处理的的作用,一一般出的的GET方式传传递过来来的消息息都是经经过urllenccodee()过的字字符。/* * innit.incc.phhp* 初始化化程序*/reequiire_oncce(ddirnnamee(_FILLE_).connfigg.innc.pphp);rrequuiree_onnce(ROOOT_PPATHH.ssecuuritty.iin
15、c.phpp);reqquirre_ooncee(DBB_PAATH.DBB.phhp);reequiire_oncce(TTPL_PATTH.Smaartyy.cllasss.phhp);/* 初始始化数据据库链接接 */$dbb = DB:coonneect(DBB_TYYPE:/DDB_UUSERRDBB_PAASS:DB_HOSST/DDB_NNAMEE, DB_OPTT);iif (DB:issErrro($db) reeturrn $dg-geetMeessaage();$tppl = &nnew Smaartyy();/* 初始化化模板 */$tppl-temmplaatess_
16、diir = TPPL_TTEMPPLATTE_DIIR;$tpll-ccomppilee_diir = TPPL_CCOMPPILEE_DIIR;$tpll-ccachhe_ddir = TPLL_CAACHEE_DIIR;$ttpl-coonfiigs = TPLL_COONFIIGS_DIRR;$ttpl-liifettimee = TPPL_LLIFTTTIMME;$tpll-ccachhingg = TPPL_CCACHHEINNG;$tpll-lleftt_deelimmiteer = TPPL_LLEFTT_DEELIMMITEER;$tpll-rrighht_ddeliimit
17、ter = TTPL_RIGGHT_DELLIMITEER;基本文文件描述述完毕。代代码写了了不少,只只是为了了更好的的理解这这个模式式。四、框框架实际际开发说明:我们以以下项目目代码都都是以cms数据库库中topiic表做例例子,代代码只是是为了演演示框架架结构,没没有对代代码进行行测试,不不保证能能够正常常运行。toppic的表结结构:CREATTE TTABLLE toppic ( iid intt(111) NNOT NULLL aautoo_inncreemennt, ttitlle varrchaar(2255) NOOT NNULLL deefauult , adddtimme
18、intt(111) ddefaaultt NUULL, aauthhor vaarchhar(50) deefauult NULLL, ttypee iint(11) deefauult NULLL, ooptiion innt(111) deffaullt NNULLL, PRIIMARRY KKEY (id), KEEY id (id);(一)Datta层:数数据采集集层Datta层主要要就是针针对数据据库的所所有操作作都封装装起来,然然后通过过接口的的形式提提供给Php层进行行调用,同同时在Datta层里也也封装了了一些原原始的数数据库操操作(类类似于Javva中的DAO)。一般Datt
19、a层都是是类的形形式,保保存在我我们上面面的 /cclasss目录下下,一般般的准则则是一个个类文件件操作一一个数据据表,就就是说不不管具体体的业务务逻辑如如何,所所有的数数据表操操作都是是封装在在一个类类文件里里的。比比如说我我们有一一个数据据表叫做做toppic,那么么我们对对应操作作的类文文件就是是:toppic.claass.phpp。其实实这里是是可以做做扩展的的,比如如说,我我们的项项目非常常庞大,有有很多内内容,比比如包括括有CMS、Bloog、BBS等等,那那么我们们就必须须给每一一个栏目目分配一一个数据据库,那那么针对对当前操操作数据据库的话话,就使使用类中中封装的的链接方方
20、法进行行链接,就就可以抛抛弃我们们上面iniit.iinc.phpp中初始化化的操作作,而操操作在类类里面进进行的链链接。假设我我们目前前操作的的栏目是是CMS系统,数数据库名名叫做cms,那么么我们下下面构造造一个操操作cms数据库库里面的的toppic表的类类来。/* cmms_ttopiic.cclasss.pphp* 文章处处理类*/cclasss ccmsTTopiicvaar ccmsDDBNaame; /数据库库名vvar cTaableeNamme; /当前操操作的表表名vvar cDssn; /数据链链接源varr cDDebuug; /是否打打开调试试,1为是,0为否vva
21、r cDbbPoiinteer /链接资资源vvar cfeetchhModde /获取数数据库资资料的方方式vvar cEnncodde /数据库中中数据保保存的编编码格式式,默认认是UTFF-8/* 构构造函数数 */fuuncttionn cmmsToopicc() /配置信信息从connfigg.innc.pphp中设置置 $thiis-cfeetchhModde = DBB_FEETCHHMODDE_DDEFAAULTT; $thhis-cTTablleNaame = toppic; $thhis-cDDsn = myssql:/. DDB_UUSERR.:. DDB_PPASSS.
22、 DBB_HOOST./. DBB_NAAME; $thiis-cEnncodde = uutf88;/* 链链接数据据库 */fuuncttionn coonneectDDataabasse() if (!iis_oobjeect($cDDbPoointter) $thiis-cDbbPoiinteer = DBB:cconnnectt($tthiss-ccDsnn); iif ($thhis-cEEncoode=uutf88) $thiis-cDbbPoiinteer-queery(seet nnamees utff8); $thhis-cDDbPoointter-seetFeetchhM
23、odde($thiis-cfeetchhModde); if (DBB:iisErrrorr($tthiss-ccDbPPoinnterr) rretuurn fallse; reeturrn $thiis-cDbbPoiinteer; /* 关关闭数据据库连接接 */fuuncttionn clloseeDattabaase() iif (is_objjectt($tthiss-ccDbPPoinnterr) $tthiss-ccDbPPoinnterr-ddiscconnnectt(); /*- 数据库库基本操操作 -*/* 插插入操作作 */fuuncttionn innserrt($a
24、rrr) iif(!is_arrray($arrr) | couunt($arrr) = 0) retturnn faalsee; iff( = $tthiss-ccTabbleNNamee) rretuurn fallse; $ddb = $tthiss-cconnnecttDattabaase(); $rres = $db-auutoEExeccutee($tthiss-ccTabbleNNamee,$aarr,DB_AUTTOQUUERYY_INNSERRT); if(DB:issErrror($rees) reeturrn $ress; ellse $innserrtIdd = ($d
25、db-gettOnee(sseleect LASST_IINSEERT_ID();); if($innserrtIdd0) rretuurn $innserrtIdd; eelsee retturnn trrue; /* 更新操操作 */funnctiion upddatee($iid,$arrr) iif( != $id & !(iis_aarraay($arrr) reeturrn ffalsse; $dbb = $thhis-coonneectDDataabasse(); $rees = $ddb-auttoExxecuute($thhis-cTTablleNaame,$arrr,DDB
26、_AAUTOOQUEERY_UPDDATEE,iid = $id); if(DB:issErrror($rees) reeturrn ffalsse; eelsee reeturrn ttruee; /* 删删除操作作 */fuuncttionn deelette($id) $dbb = $tthiss-cconnnecttDattabaase(); $rres = $db-quueryy(DDELEETE FROOM .$tthiss-ccTabbleNNamee. WHEERE id = $idd); if(DB:issErrror($rees) rretuurn fallse; elss
27、e rretuurn truue; 上面的的代码一一个很基基本的针针对一个个表操作作的类雏雏形已经经描述出出来了,包包括连接接数据库库,基本本的数据据库原始始操作都都有了。你你肯定会会问,为为什么没没有把sellectt的操作作封装进进去?主主要是因因为sellectt是SQL里最复复杂的操操作,不不可能写写那么通通用的一一个方法法去操作作它,所所以好不不如不写写,自由由发挥。那么我我们需要要加上一一些基本本的功能能呢?比比如读取取内容、新新增加一一篇文章章等操作作,那么么我们还还必须在在类里面面添加一一些方法法,比如如我们增增加提取取一篇文文章内容容、提取取指定时时间的文文章、提提取指定定类
28、别的的文章、统统计目前前所有文文章的总总数等操操作。/* cmms_ttopiic.cclasss.pphp* 文章类类增强*/cclasss ccmsTTopiic/ .上面已已经描述述的方法法省略/* * 函数: ggetTTopiicCoonteentBByIdd() * 功能: 获取指指定ID的文章章的内容容 * 参数: $id 指定要要获取的的ID * $ccolss 要提取取的字段段值 * 返回: 成功返返回数据据集数组组,失败败返回错错误信息息 */ffuncctioon ggetTTopiicCoonteentBByIdd($iid, $cools=*) $db = $thii
29、s-connnecctDaatabbasee($tthiss-ccDsnn); $ssql = SELLECTT $ccolss FRROM . $thhis-cTTablleNaame . WHEERE id = $idd; $ressultt = $dbb-ggetAAll($sqql); iif (DB:issErrror($reesullt) rretuurn $reesullt-gettMesssagge(); eelsee $db-diiscoonneect(); rretuurn $reesullt; /* * 函数: ggetTTopiicByySpeeciffyTiime()
30、 * 功能: 获取指指定时间间的文章章的列表表 * 参数: $staartTTimee 指定开开始时间间 * $eendTTimee 结束时时间 * $cools 要提取取的字段段值 * 返回: 成功返返回数据据集数组组,失败败返回错错误信息息 */ffuncctioon ggetTTopiicByySpeeciffyTiime($sttarttTimme=00, $enddTimme=00, $colls=*) $dbb = $thhis-coonneectDDataabasse($thiis-cDssn); $staart = ($sttarttTimme = 00) ? : WHHERE
31、E adddtiime $staartTTimee; $eend = ($enndTiime = 0) ? : AAND adddtimme cTaableeNamme . .$sstarrt . .$eend; $ressultt = $dbb-ggetAAll($sqql); iif (DB:issErrror($reesullt) rretuurn $reesullt-gettMesssagge(); eelsee $db-diiscoonneect(); rretuurn $reesullt; /* * 函数: ggetTTopiicByyTyppe() * 功能: 获取指指定类别别的
32、文章章的列表表 * 参数: $typpe 指定的的类型 * $ccolss 要提取取的字段段值 * 返回: 成功返返回数据据集数组组,失败败返回错错误信息息 */ffuncctioon ggetTTopiicByyTyppe($typpe, $cools=*) $db = $thiis-connnecctDaatabbasee($tthiss-ccDsnn); $ssql = SELLECTT $ccolss FRROM . $thhis-cTTablleNaame . WHEERE typpe = $typpe; $reesullt = $ddb-gettAlll($ssql); if (D
33、BB:iisErrrorr($rresuult) retturnn $rresuult-geetMeessaage(); elsse $dbb-ddiscconnnectt(); retturnn $rresuult; /* * 函数: ggetTTopiicSuum() * 功能: 获取所所有文章章总数,如如果指定定类别,则则获取指指定类别别总数 * 参数: $typpe 指定的的类型 * 返回: 成功返返回获取取的总数数,失败败返回错错误信息息*/fuuncttionn geetToopiccSumm($ttypee=) $db = $thiis-connnecctDaatabbasee(
34、$tthiss-ccDsnn); $ttypeeStrr = ($ttypee = ) ? : WWHERRE ttypee = $ttypee; $sqll = SEELECCT ccounnt(iid) FROOM . $thiis-cTaableeNamme . .$ttypeeStrr; $reesullt = $ddb-gettOnee($ssql); if (DBB:iisErrrorr($rresuult) retturnn $rresuult-geetMeessaage(); elsse $dbb-ddiscconnnectt(); retturnn $rresuult; 上面
35、我我们构造造了一些些数据提提取类,这这应该就就是我们们Datta层的核核心了。写写方法的的时候要要尽量考考虑到扩扩展性,比比如对列列的提取取,比如如一个方方法适合合多种情情况,比比如排序序等等,考考虑的越越多,以以后维护护起来就就比较容容易,当当然,我我推荐的的方法是是一个方方法尽量量就做一一件事情情,如果果一个函函数要做做多个事事情,那那么就写写成多个个函数,这这样便于于代码重重用和维维护性,我我个人认认为一个个方法最最用不要要超过100行。如果函函数中有有涉及到到数据库库的操作作,一定定记得结结尾的时时候把数数据关闭闭掉,不不然很容容易把服服务器资资源占用用光。当当然,你你也可以以在PHP
36、层去关关闭连接接。比如如,你需需要很多多次调用用同一个个方法,那那么这个个方法如如果反复复的连接接数据库库又关闭闭数据库库,也很很浪费资资源,而而且速度度慢,这这个时候候就可以以把关闭闭数据库库的操作作在Php层进行行关闭,你你可以先先构造好好一个方方法来进进行,比比如我们们上面的的 clloseeDattabaase() 方法。(二)Php层:数数据调用用层PHPP层主要要就是把把从Datta层收集集的数据据再这一一层进行行调用。因因为我们们基本的的原则就就是把所所有跟数数据库的的操作都都封装在在Datta层里,在在其他层层都不涉涉及到任任何的直直接对数数据库的的操作,这这样能够够进行良良好
37、的封封装,这这样有点点类似于于 JSSP和Javvabeean,Javvabeean的类负负责和数数据库交交互,JSP负责调调用Javvabeean来输出出数据。我我们这里里的PHP层就相相当于JSP层,前前面的Datta层就相相当于Javvabeean层,这这样玻璃璃他们之之间的耦耦合度,能能够方便便程序日日后的维维护。我们这这里的PHP层主要要就是复复杂从数数据库种种提取数数据,完完成一些些简单的的逻辑,然然后把数数据输出出到Temmplaate(模板板层)。现现在我们们利用示示例代码码来看看看PHP层是如如何调用用Datta层的数数据的。/* toopicc_liist.phpp* 文章
38、列列表程序序*/* 包含含基本文文件 */reqquirre_ooncee(iinitt.innc.pphp);rrequuiree_onnce(cllasss/cmms_ttopiic.cclasss.pphp);/实例化化Datta层对象象$toopicc = neww cmmsToopicc();/获取文文章类型型变量$toppicTTypee = inttvall(geet(typpe);/从Datta层中把把数据提提取过来来$toopiccLisst = geetToopiccByTTypee($ttopiicTyype);/给模板板变量赋赋值后输输出页$tpll-aassiign(
39、toopicc, $toopiccLisst);$tppl-asssignn(ttopiic.hhtmll);代码是是不是很很简单?就是把把数据获获取过来来,然后后解析到到模板层层中去处处理,所所以这样样如果以以后出现现问题改改起来比比较容易易,比如如是数据据获取的的问题,那那么直接接改上面面的类文文件就行行,如果果是模板板显示的的问题,那那么直接接修改模模板层中中的对应应的模板板页就可可以,非非常便于于维护。(三)Temmplaate层:模模板层这个模模板层就就是我们们常说的的网页了了,不过过这里就就是包含含了一些些Smaartyy的模板板变量和和HTMML混和,模模板页处处理的时时候就对对
40、页面中中的模板板变量进进行替换换,最后后我们看看到的结结果就是是模板页页和PHP层中的的程序输输出混和和的结果果。一般模模板页设设计的时时候,最最好遵循循Web标准,就就是说尽尽量在页页面中不不使用表表格等htmml标签来来控制页页面,而而是使用用div层来存存放数据据,使用用css样式表表来控制制页面布布局,这这样对包包括JavvaSccrippt脚本的的编写,以以后页面面的改版版等等非非常有好好处。而而且如果果要还模模板也很很简单,只只需要把把css文件替替换就可可以达到到效果。当当然,如如果对web标准不不了解,那那么建议议去阅读读一下网网站重构构这本本书。我们下下面就简简单的描描述一下
41、下Temmplaate(模板板层)的的代码是是如何的的。* 加载载头部文文件 *inncluude fille=heaaderr.httml* 模板板主体 * 左边导导航条 *文章列列表seectiion namme=ttopiicLiist looop=$toppic 标题:$toopicctoopiccLisst.tittle|esccapee:hhtmll|ttrunncatte:330:.:ttruee | 时间:$ttopiicttopiicLiist.adddtiime|datte_fformmat:%YY年%m月%d日 | 作者:$ttopiicttopiicLiist.auut
42、hoor|eescaape:httmlsecctioonellse 暂时没没有任何何文章/ssecttionn* 加载载底部文文件 *inncluude fille=fooot.hhtmll模板页页中大致致可能有有一些JavvaSccrippt程序,或或者有样样式文件件,一般般使用样样式文件件来控制制页面的的布局和和显示效效果。我我们这里里没有详详细的描描述,在在实际项项目中可可以由网网页制作作人员去去负责。五、使使用DPT模式的的项目规规划一般在在所有的的软件项项目或者者是网站站项目中中,要保保证一个个项目能能够顺利利完整的的完成,那那么便需需要技术术主管或或者架构构师良好好的设计计和管理理
43、。一般般所有项项目中人人是最难难控制的的因素,你你可以把把项目指指定的非非常完善善,架构构可以选选择的非非常合理理,但是是你不能能控制人人的因素素,不能能保证项项目的中中的某个个成员可可能在任任何时候候离开项项目。当当在PHP项目中中,如果果一个项项目角色色忽然的的离去,可可能导致致项目要要停顿,要要重新找找人来接接替,影影响了项项目的进进度,那那么如何何有效的的控制和和解决这这些问题题。在一个个使用DPT设计模模式的项项目中,项项目中个个个角色色分别有有网页设设计师、网网页制作作人员、客客户端脚脚本JavvaSccrippt程序员员、服务务器端PHP程序员员。他们们的分工工都是什什么呢?网页
44、设设计师负负责设计计网页的的界面,生生成效果果图,然然后由网网页制作作人员去去做成网网页,当当然,如如果是遵遵循Web标准的的项目的的话,那那么网页页制作人人员主要要的任务务就是负负责页面面布局样样式的编编写。客客户端程程序员主主要是负负责客户户端脚本本的编写写,比如如针对页页面中需需要使用用的JavvaSccrippt进行编编写,PHP程序员员主要是是负责我我们上面面Datta & PHHP & Teempllatee 三层的的代码编编写,当当然,如如果项目目足够庞庞大,完完全可以以拆分出出来,有有PHP程序员员负责Datta层,有PHP程序员员负责Php和Temmplaate层,分分工清晰
45、晰,Php层程序序员只是是需要调调用Datta层程序序员已经经写好的的类库进进行调用用,不用用关心类类是如何何实现的的。这样一一个项目目架构下下来,可可以按照照任务需需要来安安排某个个模块的的人的数数量,最最大限度度的把项项目规划划好。当当然,项项目中一一些必要要的因素素是要考考虑的,比比如,如如何让网网页制作作人员、客客户端脚脚本程序序员和PHP程序员员良好的的合作,那那么就是是分离他他们的责责任,比比如,模模板页必必须由PHP程序员员来编写写,然后后提交给给JavvaSccrippt程序员员制作客客户端脚脚本,最最后再由由网页制制作人员员通过CSS来控制制布局,那那么Php程序员员在模板板
46、页中就就必须使使用div等标签签来定义义一个块块的数据据,如果果任何一一块出了了问题,那那么对应应找相应应责任人人,就能能够很好好的避免免彼此推推卸责任任,或者者权责不不分的情情况,这这样有利利于管理理,也有有利于每每个开发发成员之之间的良良好合作作。为了防防止项目目失控,或或者不会会因为项项目成员员的离开开而影响响项目的的进度和和管理,必必须有相相应的方方法和规规则。我我们主要要针对PHP程序员员来进行行描述,部部分方法法同样适适用于网网页制作作人员和和客户端端脚本程程序员。(1)编编码规范范项目开开发中为为了便于于维护和和以后其其他人接接手代码码,必须须统一编编码规范范,包括括对目录录、文
47、件件名、类类、函数数、变量量、注释释等等都都必须遵遵循标准准,而且且为了代代码的维维护,必必须要求求PHP程序员员编写注注释。目目前基本本遵循的的是Freedriik KKrisstiaanseen写的PHPP 编码规规范,或或者是PEAAR中代码码的规范范。如果代代码为了了做成接接口,或或者需要要做成参参考的文文档方便便以后维维护代码码,使用用phppDocc等工具具,那么么为了能能够使用用PEAAR包中的phppDocc能够正正常识别别,所以以一般建建议遵循循PEAAR包的规规范,主主要是DPT模式中Datta层中类类的的编编码必须须规范。PEAAR中peaar.pphp中基类类的部分分代
48、码:classs PEEAR /* 属性的的描述 */ / ppropperttiess /* * Wheetheer tto eenabble intternnal debbug messsagges. * * vvar boool * acccesss priivatte */ varr $_debbug = ffalsse; /其他属属性省略略. / /* 对方法法的描述述 */ / cconsstruuctoor /* * Connstrructtor. RRegiisteers thiis oobjeect in * $_PPEARR_deestrructtor_objjectt_liist forr deestrructtor emuulattionn iff a * desstruuctoor oobjeect exiistss. * * parram strringg $eerroor_cclasss (opptioonall) wwhicch cclasss tto uuse forr * eerroor oobjeectss, ddefaaultts tto PPEARR_Errrorr. * acccesss puubliic * rretuurn voiid */ funnctiion PEAAR($errror_claas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学26年老年心血管疾病合并高血脂查房课件
- 26年受试者权益保障指引
- 消防法纪教育学习大纲
- 产教融合三维协同机制
- 路桥结构安全检测流程规范
- 2026腹腔镜胃袖状切除术(LSG)的护理查房解读
- 2026PCI术后穿刺部位观察与护理解读
- 混合实验设计
- 事故教育培训课程体系
- 教育科研讲评实施要点
- 《XXXX煤矿隐蔽致灾地质因素普查报告》审查意见
- 资产评估质量控制制度流程
- 2024-2030年版中国尿素行业市场容量预测及投资风险分析报告
- 化工工艺管道施工焊接方案
- 苏教版六年级数学下册第七单元大单元教学设计
- 海鲜采购合同
- 《台湾省的地理环境与经济发展》示范课教学设计【湘教版八年级地理下册】
- 麋鹿麋鹿简介
- 服装品质管理课件
- 现代物流学说课公开课一等奖市优质课赛课获奖课件
- 广东网架安装作业指导书四角锥网架
评论
0/150
提交评论