|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在我开始学习PHP以前,我从未想过要做软件工程,即便是在去听过华育国际的关于软件工程的美好前景后,因为我一直都没有想过要与代码打交道,而是想学好所学专业,做个网络工程师或者是网络安全人员。法式 创立乖巧布局的PHP法式
工夫:2000/10/19 09:06 作者:sharetop 奥索网
很早就想写这篇文章了,但一向没有工夫完成它。不是说我来告知人人若何做,我更但愿本文只是做为一个引子,与人人来会商关于若何创立一个无效地、天真的收集使用法式。
经由了2-3年的收集使用法式开辟任务,我的开辟经历变得加倍活泼了,回过火来看我之前为Geocrawler写的代码,几乎不敢信任这是我的。因为GPL的缘由,在PHPBuilder中的源码也是良莠不齐的。
比来我做为一个有经历的PHP开辟者,一向在帮着写SourceForge,我想这显示出了终究了局的一个局限。好的代码应被分红了多个局部,适合的库及函数挪用,清晰的数据库布局,站点的每个局部与其它局部都是绝对自力的。
然而,这仍不是最好的。假如我可以重做,我将更多的存眷于HTML层与数据层的分别,经由过程对象及清晰的函数库完成这一点。
幽美的图形
我晓得司理们喜好用幽美的图形及图表来描写它们,这将给咱们留下最好的印象。用这类埋没在一个布局后的设法,你可以把你的逻辑与外不雅分别,这意味着任何一个庞杂的法式都可以用"API/Data Access Layer"来表述。
与其你把平安检测、更新的句子等放在HTML层中,不如把它们全体地放在你的API层里。而这个HTML层只含有复杂的函数挪用和前往的数组、对象或自定的其它甚么,和一些数据库的检索了局的纠合等。
假如你如许做了,顶层将长短常的肥大,你可以便利地创立及保护它。
以下的例子中,这个HTML接口中只要一些API层中的函数的直接挪用,一些HTML东西库(它能生成一个弹出框等等),和一些从数据库笼统层中挪用的数据库操作办法(你不需求绑定某一个出格的数据库)。
基本
天真的PHP法式布局最根基的方面有以下几点:
数据库有关性
界面有关性
可移植性
面向对象或最少应由函数库构成
还有其它的?
固然还有一些其它的器材,但我以为那都是太大了,也许你本人能指出它们。
让咱们具体地谈谈它们每条吧。
1、数据库有关性
你从不晓得你的站点将会在哪里运转,固然在你创立它时,你但愿它变和得很大而且有很高的流量。所以你不想把你本人束缚在 MS Access 下面或其它甚么笨重的数据库体系。固然你不克不及立即地拔出各类分歧的数据库体系,然而你有能够很便利地在它们两头切换。你有一些分歧的选择可以把你的数据库挪用笼统出来。在PHP中一个奇异的办法是你不能不为每一个分歧的数据库体系写出分歧的代码,由于在PHP中对每种分歧的数据库的会见函数是分歧的。为了避开这点,你可使用一个笼统地数据库会见层,就象PHPLib、下一个版本的PEAR、及咱们在SourceForge中描写的那样。
2、界面有关性
一个使用法式是它的手艺更主要仍是它所运转的站点更主要?咱们其实不能真正地晓得。我历来不信任这一点--HTML是一个尺度。出格是关于一个收集使用法式而言,界面产生了修改,意味着咱们不能不老是重写。然而假如你的使用法式是很大很庞杂的,你就要为你的数据库创立一些其它的接口了,只需你不想在你的站点法式中各处copy&paste你的会见反省等代码。这也意味着,假如你准确地设计了你的使用法式,你可以很轻易地改写你的站点让它顺应WAP,只需复杂地写一个小的WAP界面,并让它挪用你的数据库会见对象罢了。但如果你没有很好地设计你的法式,你把你的HTML版改成WAP版是一个庞杂的工程。
我把这个设法也带入了SourceForge中,咱们有一个伟大的用户群,为咱们发送/吸收bugs、义务等。起首,咱们指出一切的这些将经由过程咱们的web页面接口,然后,因为Eric Raymond 和其别人给的压力,咱们决意用XML来做数据库的内部接口。
侥幸的是咱们曾在四月已把法式的中心逻辑代码与它的界面分别了。我将试着表达咱们是若何做的,但愿对你的任务有所匡助。
这个SourceForge的bugs跟踪器和其它的一些东西被分红两个库 - 这个HTML库和数据会见库。这个数据会见库反省输出的值的准确性,处置平安校验,而且当做功/掉败时前往TRUE 或 FALSE。
因为简化的缘由,这个例子并没有基于一个完美的对象形式,那样我还要注释这个基类和它的一些衍生类等等,我想这个例子将给你一个最通俗的设法。
HTML 库的例子
<?php
//connect to database
require ("database.php");
//common utils like header/footer HTML
require ("html.php");
//data access library
require ("bug_data.php");
echo site_header("Page Title");
echo "<H4>Updating A Bug</H4>
<P>";
if (bug_data_update($field1,$field2,$field3)) {
echo "<H3>Update Failed!</H3>";
} else {
echo "<H3>Updated Bug Successfully</H3>";
//echo the global error string
echo $feedback;
}
echo site_footer();
?>
Data 会见库的例子
<?php
/**
*
* controls access to updating a bug in the
* database. Validates data and checks security
* Returns true on success, false on failure
*
*/
function bug_data_update ($field1,$field2,$field3) {
//global string to report back errors
global $feedback;
//$field1 and $field2 are required
if (!$field1 || !$field2) {
$feedback="Field 1 And Field 2 Are Required";
return false;
}
//make sure this user has permission to update
if (!user_isadmin()) {
$feedback="You Must Be An Admin To Update a Bug";
return false;
}
//now let's update the bug
$result=db_query("UPDATE bug ".
"SET field2='$field2',".
"field3='$field3' ".
"WHERE id='$field1'");
//now check your query for success/failure
if (!$result) {
//update failed
return false;
} else {
return true;
}
}
?>
3、可移植性
毫无疑问,你不想让你的代码只能用于一个固定的站点,未来咱们能够改动色采的选择、元素的称号、字体或其它一些甚么,如许应设置一个config文件,它被多个页面所包括。更好的概念是你的站点被模块化,你不需求copy&paste任何一个HTML文件,我偏向于把这些放入一个函数,在任何需求的中央挪用它们。
一样的办法可用于数据库的暗码、数据库毗连字串等,这些可以放入一个数据库处置的笼统层中。
4、面向对象/函数化
咱们不是用COBOL开辟,所以这意味着咱们可以把历程分红多个函数的挪用。每一个挪用都是一个主动的行动,有时仅仅是挪用一小段其它的函数并前往这个了局。
一个好的例子是在每个页面校验用户是不是登录,你可以用cookie或查询数据库来完成这个功效,但一旦你想改动你的验证体系,你不能不修改每个页面,其实你应当可以经由过程修改函数库里一个通俗的函数就完成这个变化的。任什么时候候,你写一段代码,假如它将会被用于多于一个中央,你就要思索把它放入一个库里了。
其它还有甚么?
明显还有良多我没有谈到的事,告知我你的设法,我将鄙人一篇文章中来会商它们。出格地是,假如你写了一个大型的、庞杂的使用法式,我想听听你是若何计划它的及你重做时不甚么分歧的设法。
-------------------
作者:Tim Perdue
译者:sharetop(ycshowtop@21cn.com)
来历:www.phpbuilder.net
参加PHP开发学习,或许只是一次偶然的想法吧!只是想在走向社会之前体验、学习在一个公司或者说是项目团队之中如何去更有效的沟通、交流、共同合作,还有就是为毕业实习找工作增加伐码。 |
|