1:框架的选择:
如今
的PHP框架有很多
选择,比如
:CakePHP,Symfony,Zend Framework等等,至于应当
应用
哪一个并没有唯一的答案,要按照
Team里团队成员对各个框架的了解
程度
而定。很多
时间
,纵然
没有应用
框架,一样能 写出好的措施来,比如
Flickr听说
就是用Pear+Smarty如许
的类库写出来的,以是
,是否用框架,用什么框架,一样平常
不是最重要
的,重要
的是我们 的编程头脑
里要有框架的意识。
2:逻辑的分层:
网站局限
到了肯定
的程度
之后,代码里种种
逻辑胶葛
在一起,会给掩护和扩张带来伟大的阻滞,这时我们的办理
行动
着实
很大略
,那就是重构,将逻辑举办分层。通常,自上而下可以分为示意层,操纵层,范围层,恒久层。
所谓示意层,并不只仅就指模板,它的范畴
要更广一些,全部
和示意干系
的逻辑都应当
被纳入示意层的范畴
。比如
说某处的字体要表现
为赤色
,某处的开头要 空两格,这些都属于示意层。很多
时间
,我们轻易
犯的过错
就是把本属于示意层的逻辑放到了其他层面去完成,这里说一个很常见的例子:我们在列表页表现
文章标 题的时间
,都市
设定一个最大字数,一旦问题长度高出
了这个限定
,就截断,并在后头表现
“..”,这就是最典范
的示意层逻辑,但是实际
情况,有很多
措施员都 是在非示意层代码里完成数据的获取和截断,然后赋值给示意层模板,如许
的代码最直接的错误就是同样一段数据,在这个页面我也许想表现
前10个字,再另一个 页面我也许想表现
前15个字,而一旦我们在措施里固化了这个字数,也就丢失
了可移植性。精确
的做法是应当
做一个视图助手之类的措施来专门处理
赏罚
词攀?
嗦呒?,比 如说:Smarty里的truncate就属于如许
的视图助手(不外
它谁人
实现不适宜
中文)。
所谓操纵层,它的重要
作用是界说
用户可以做什么,并把操纵
结果反馈给示意层。至于怎样
做,通常不是它的职责范畴
(而是范围层的职责范畴
),它会通过 委派把怎样
做的事变
交给范围层行止
理
赏罚
。在应用
MVC架构的网站中,我们可以看到类似下面如许
的URL: domain.com/articles/view/123,其内部编码实现,一样平常
就是一个Articles独霸器类,内里
有一个view行动
,这就是一 个典范
的操纵层操纵
,由于
它界说
了用户可以做一个查察
的举措
。在MVC架构中,有一个准则是这么说的:Rich Model Is Good。言外之意,就是Controller要维持
“瘦”一些比拟
好,进而阐发
操纵层要只管
大略
,不要包孕涉及范围内容的逻辑。
所谓范围层,最直接的表明
就是包孕
范围逻辑的层。它是一个软件的魂魄
地点
。先来看看什么叫范围逻辑,大略
的说,具有明了的范围观念
的逻辑就是范围逻 辑,比如
我们在ATM机上取钱,过程大抵
是如许
的:插入银联卡,输入暗码
,输入取款金额,断定
,拿钱,然后ATM吐出一个买卖
营业凭条。在这个过程中,银联卡 在ATM呆板
里完成钱从帐户上划拨的过程就是一个范围逻辑,由于
取钱在银行中是一个明了的范围观念
,而ATM机吐出一个买卖
营业凭条则不是范围逻辑,而仅是一 个操纵逻辑,由于
吐出买卖
营业凭条并不是银行中一个明了的范围观念
,只是一种能力
伎俩
,对应的,我们取钱后不吐买卖
营业凭条,而发送一条提醒短信也是也许的,但并 不是肯定
云云
,假如
在实际
情况中,我们哀求
取款后必需
吐出买卖
营业凭条,也就是说吐出买卖
营业凭条已经和取款严密
结合,那么你也可以把吐出买卖
营业凭条看作是范围逻辑 的一部分
,统统
都以题目
的具体
情况而定。在Eric那本经典的范围驱动计划
中,把范围层分为了五种根本
元素:实体,值器材
,做事,工场
,仓储。具体
可以参 阅书中的先容
。范围层最常犯的过错
就是把本应属于范围层的逻辑透露到了其他条理
,比如
说在一个CMS体系
,对热点
文章的界说
是如许
的:每天
被涉猎
的次数多 于1000次,被评述的次数多于100次,如许
的文章就是热点
文章。对付
一个CMS来说,热点
文章这个词无疑是一个重要
的范围观念
,那么我们怎样
实现这个 逻辑的计划
的?你也许会给出类似下面的代码:“SELECT ... FROM ... WHERE 涉猎
> 1000 AND 评述 > 100”,没错,这是最大略
的实现行动
,但是这里必要
留意
的是“每天
被涉猎
的次数多于1000次,被评述的次数多于100次”这个重要
的范围逻辑被躲藏
到 了SQL语句中,SQL语句显然不属于范围层的范畴
,也就是说,我们的范围逻辑透露了。
所谓恒久层,就是指把我们的范围模子
生涯
到数据库中。由于
我们的措施代码是面向器材
作风
的,而数据库一样平常
是相干型的数据库,以是
我们必要
把范围模子
碾平,手法生涯
到数据库中,但是在PHP里,直到如今还没有非常好的ORM出现,以是
这方面的办理
方案
不是出格
多,参考Martin的企业操纵架构模式一 书,大抵
可以应用
的行动
有行数据入口(Row Data Gateway)可能表数据入口(Table Data Gateway),可能把范围层和恒久层合二为一变成
活动记实
(Active Record)的行动
。
阅读(1838) | 评论(0) | 转发(0) |