php开发-工欲善其事必先利其器之框架篇
前言
选择一个好的框架可以成几何倍数的提升开发效率以及团队协作能力。为避免不必要的框架之争,本系列只作描述讲解,不作比较。个人推荐框架 Yii framework。此部分内容假定各位看官已有基本的php开发基础以及面向对象编程经验。
1、框架简介
Yii framework,一款基于事件驱动、面向对象、功能强大、性能强劲、设计优美的为了web 2.0而诞生的php mvc框架。
2、功能介绍
资源文件管理
在多人协同开发的情况下会发生这样一个问题,js文件的重复加载导致js代码出现一些异常诡异的错误。同样的情况也会出现在css文件加载的时候。那么,我们在页面头部模板里面把整个站点都会用到的javascript文件和css文件都全部加载上?不不不,这太浪费了。用时加载才是王道。在视图文件需要的时候加上引用标签来解决加载问题又有可能导致在其他的视图文件里面会有重复加载的情况,如果这仅仅只是资源浪费那还在可以忍受的爆发边缘,可惜情况远不如理想中那么美好。重复的加载javascript文件可能导致一些诡异程序错误,重复加载css文件同样可能导致一些奇怪的页面渲染。统一的管理资源文件成为了一件迫切的事情。CClientScript类,专业的类干专业的事情。
对资源的文件的加载使用统一接口,避免重复加载,合理管理js代码,包括控制jquery的命名空间以及代码在页面的插入位置,还可以通过配置文件解决js包依赖问题。
i18n国际化
对于需要进行国际化的网站而言,处理多国语言是一件平常又不平凡的事情。通常的解决方案是通过一种语言(常为英语)为模板,编写对应的语言文件在显示的时候进行替换。但是在模块化的开发中,会遇到这样的一种情况就是,A模块的模板语言与B模块的模板语言在一些譬如转换长度、表意、语境等等的不一致导致模板语言的维护困难。每个模块的国际化工作应由本模块自身完成,这就避免了在整个项目中维护模块之间的国际化工作中的冲突。
异常处理
所有的异常行为都是可以预判的,只是这将会花费大量的时间以及维护的精力。对于致命的程序错误理应由统一的处理方式对错误的原因进行详细的纪录。好用而又强大的异常处理显得那么重要。异常的使用会消耗掉一部分的程序性能,因为在程序出错的时候需要对运行的程序进行堆栈的回溯,但是个人认为这样的消耗在查找问题根源的时候就会显得无足挂齿,甚至是非常有必要了。
rbac解决方案
一个官方推荐的权限解决方案可以很好的统一大家对于一个项目的通用权限管理的认识。一个权限可以细化到某个角色拥有对某个模块的某个控制器的某个action的某个参数范围内。我想,再往细了的权限已经不再属于通用权限管理的部分了吧。
active record模式
一个表对应一个模型类,一个类实例对应一行纪录,增删改查。数据操作就是那么简单。而强大的关联查询更是大大地简化了数据的读取操作。对于需要优化的数据库查询,那应该是要放到优化的阶段去做的事情,对于需要进行字段限制的查询那是在逻辑处理的部分去做的事情。而开发初期,尽量少的代码尽量多的数据,尽量快的实现原型程序验证需求的准确性是一件迫切而又紧急的事情。
表单模型
一个表单模型解决了数据的收集,验证,加工,处理。统一的方式管理表单,远离噩梦一样的出现在各种乱七八糟的地方的表单数据的接受处理验证吧。统一的管理方式,统一的验证规则,统一的处理入口。好吧,这也有一个坏处,那么就是,每个表单都需要有一个模型类的对应处理。
测试
测试套件对现有代码进行测试,可以有效的减小代码重构优化时发生bug的几率。统一的测试入口,合理的测试环境的配置文件,简单易用的测试方法,犹豫什么?好吧,这需要多维护一份测时代码。但,这总好过修改逻辑或者重构的代码的时候根本不知道遗漏下了多少个不为自己知道的bug强,与其让别人发现自己代码的各种小疏忽不如让自己的测试代码先发现,这可是相当有效的避免了被人说的面红耳赤还无法还嘴的尴尬。
3、优劣对比
高度统一的复用组件与极强的框架耦合
按照Yii Framework的思路可以很好的开发出可复用的组件,但是这样的组件与框架的耦合程度非常的高,很难单独剥离出来进行复用。话说也没见给PrototypeJS写的插件可以很方便的在jquery上复用。所以,其实这不是一个问题。当然偶尔出现这样的情况的时候,项目没有使用框架或者使用的是其他的框架,但是希望将Yii的某个组件比如CActiveRecord搬过去用,这就是一个比较浩大的工程了。
4、好的面向对象的代码
通过Enterprise Architect可以很好的生成代码图,清晰的表明继承关系。合理的目录结构,明了的继承路径,漂亮完整的注释以及文档(注:Yii Framework 漂亮的API文档是直接靠代码内的注释生成的)。
下附一张EA生成的base目录下的类图,右键--在新标签中打开,查看原图


浙公网安备 33010602011771号