admin 管理员组文章数量: 1087139
2024年4月29日发(作者:linux系统下载 迅雷下载)
维普资讯
i l—I l一■●■■
建立灵巧结构的 —]
首先要说明一点,笔者写这篇文章并不是要教大家如何做
才能写出一个结构非常舍理的程序。只是想通过本文提出一个
论题,与大家一起来讨论关于如何建立一个有效地、灵活的网
络应用程序。
当然还有一些其它的东西,但我认为那都不在本文
的讨论范围之内,或许你可以在实际的工作中发现它们。
让我们详细地谈谈每一条吧。
笔者在编写SourceForge过程的一些教训更加让我认识到
了:“好的代码应被分成了多个部分,合理的库及函数调用,
清晰的数据库结构,站点的每一个部分与其它部分都是相对独
立的。 在实践中,不可否认我的编程水平又得到一定的提
高。但是这并不足以让我觉得骄做。园为,即便如此做了这仍不
是最好的。如果我可以重写这个程序,我将更多的关注于}胤层
与数据层的分离,通过对象及清楚的函数库实现这一点。
这是我认为昂台理的程序结构!
l,赣据摩无关性
你从不知道你的站点将会在哪里运行,当然在你创
建它时,你希望它变得很大并且有很高的辩【量。所以你
不想把你自己约束在孵Access或者其它轻便的数据库系
统上。虽然你不能立矗4地插入各种不同的数据库系统.但
是你有可能很方便地在它们中问切换。街有—些不同的选
择可以把你的数据库调用抽象出来。在PHP中—个奇特的
方法是你不得不为每个不同的数据库系统写出不同的代
码.园为在P肿中对每一种不同的数据库的访问函数是不
同的。为了避开这点,你可以便用一个抽象地数据库访
问层,就象PHPLi b、下一个版本的PEAR、及我们在
很多时候,我更喜欢用优美的图形及图表来描述我的想
法,这将给人留下最直观的印象。用这种隐藏在一个结构后的
想法,悔可以把你的逻辑与外观分离,这意睬著任何一个复杂
的程序都可以用 API/Data Access Layer 来表述。
与其把安全检测、更新的句子等放在HTML层中,不如把
它仃埋咐地放在你的API层里。而这个HTWL层只含有简单的函
数调用和返回的数组、对象或自定的其它什么,以及一些数据
库的捡素结果的集合等。如果你这样做了,顶层将是非常的瘦
小,你可以方便地创建及维护它。
SourceForge中描述的那样。
2,界一无关性
—
个应用程序是它的技术更重要还是它所运行韵站点
更重要?我们并不能真正地知道。我从来不相信这一点一
一
}仃n是一个标准。特别是对于一个网络应用程序而言,
界面发生了改动,意味着我们不得不总是重写。但是如
果你的应用程序是根太根复杂的,伯减要为你的数据库建
立一些其它的接口了,如果你不想在你的站点程序中到处
都充斥着COpy&paste等代码的话。这也意嗥着,如果
你正确地设计了你的应用程序,你可以粮容易地致写你的
站点让它适应WAP,只要简单地写一个小的WAP界面,并
让它调用你的数据库访问对象而已。但若你没有很好地设
计你的程序,把h ̄rML版改成WAP版将是一个复杂的工程。
我把这个想法也带入了SourceForge中,我们有—个
_
灵活的PHP程序结构最基本的方面有以下几点
数据库无关性
界面无关性
可移植性
面向对象或至少应由函数库组成
巨大的用户群,为我们发送/接收bugs、任务等。首先,
我们指出所有的这些将通过我们的web页面接口,然后,
证有其它的?
由于Eric Raymond和其他^给的压力,费们决定甩x札
维普资讯
来做数据库的外部接口。这个SourceForge的bugs E艮踪器和
其它的一些工具被分成两个库:HTML库和数据访问库。这个
数据访问库检查输入的值的正确性,处理安全校验,并且当
成功/失败时返回TRUE或FALSE。
/向 let's updatethe h
I工esu】t=db_que ( 【吨A丁E hIg
s盯fiel ̄--'Sfie|d ̄.
eld3= ¥fielfl3'
mE i4-'¥fiel41一):
由于简化的原因,这个例子并没有基于一个完善的对象
模式,那样我还要解释这个基类和它的一些衍生类等等,我
想这个倒子将给体一个最普通的想法。
町札库的例子
<?p
//n check ym query for success/failm
if(!暑result){
//update failed
ret false
}el3e(
r吐urn true:
// ̄ lbect to database
require( datahas ̄曲口 ).
//c 嘲util s 1iBU header/footer
require( htⅡ1_曲D ).
//<hta s library
require( b dat ).
echo site header( Page Title ).
echo <[{4>Updating A ̄ag</H4>
<P>
3 可移蕾性
毫无疑问,你不想让你的代码只能用于一个固定的站
矗
元素的名称、字体或其它
面所
if(b da date(Ifle1d1,Sfield2.Sfield3)){
一
些什么,这样应设置一个config文件,它被多倾
echo qI3>Upda ̄e Failed 0(/t13>
包含。更好的观点是你的站点被模块化,你不需要
else{
echo 锄M曲t酣Bug SuccessfuI】y<订口>
copy&paste任何一个I眦文件,我倾向于拶吝些放八—个函
数,在任何需要的地方调用它们
//echo the global err盯string
echo¥feeflback
同样的方法可用于数据库的密码、数据库连接字串等,
这些可以放入一个数据库处理的抽象层中。
cheo sitef ̄ter().
>
4 面向对象,函数化
我们不是用COBOL开发,所以这意味着我们可以把进程
分成多个函数的调用。每个调用都是一个自动的行为.有时
仅仅是调用一小段其它的函数并返回这个结果。
一
Data访问库的例子
(
-
p
抖
+
个好的例子是在每—个页面校验用户是否登录.你可
{controls access to updating a b in the
以用cookie或查询数据库来完成这个功能,但一旦你想改变
你的验证系统,你不得不改动每一个页面,其实像应该可以
通过改动函数库里一个普通的函数就完成这个变动的。任何
时候,体写一段代码,如果它将会被用于多于一个地方,你
就要考虑把它放入一个库里了。
database.Validates data and checks se ̄ity
Returns true㈣
■
es&false oll faill】 e
f
f∞cti哪Bug data update(¥field].Sfie1d2.¥field3)
//gld ̄l striT to report back目T。fs
gld ̄al Sfeedback.
,,lfie1吐1 and¥fielc ̄are required
if([¥fieldl I }fie1d2){
l b日dF e d lⅫField 2 Are P ̄uired
显然还有报多我没有谈到的事,告诉我你的想法,我们
可以在以后继续讨论。特别地是,如果你写了一个大型的 复
杂的应用程序,我想听听你是如何规划它的及髓撤时有什么
to update
ret L玳l fB】se
//make s口e this lls has口 ms
不同的想法。■
if(1urer[s n0)【
lfeedb日c】F 叫k ̄ust Be^n A in To Update a珏』
retum fBlse;
版权声明:本文标题:建立灵巧结构的PHP程序 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1714368814a677075.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论