ruby on rails催生变革
在ror流行之前,php领域也有不少开发框架,例如mojavi、wact、phpmvc和seagull等。这些框架虽然也采用了mvc模式、数据库抽象层等技术。但由于当时php本身不像现在这样流行,所以这些框架都没有得到大量应用,最终归于沉寂。
而在感受到ror提供的快速开发能力后,php社区像被注入了兴奋剂。各种应用技术和开发框架层出不穷。
新一代框架的诞生
php社区在被ror震晕后,没有陷入过多的争论。而是立即行动起来,开始了新一代框架的设计。首先出现的第一批框架几乎都是ror的克隆。例 如php on trax(连名字都借鉴ruby on rails)和taniphp、akelos等。这些框架最大的特点就是力求100%克隆ror,不管是采用的架构、设计模式,还是使用方法。
这几个框架一开始确实吸引了开发者的注意,但随着开发者的深入了解,这些框架头上的光环逐步褪色。晦涩难懂的架构、糟糕的性能,以及太多的限制,让这些框架难以在实际项目中运用。
此时,许多php开发者认为可以借鉴ror的设计思想,但不应照搬ror的结构和实现。为此,一些同样推崇快速开发的框架开始在php社区出现。这些框架中,cakephp和symfony可谓佼佼者。
cakephp(http://www.cakephp.org/)
cakephp充满了ror的影子,从activerecord模式到视图的布局管理都和ror非常相似。而且cakephp一开始也尝试实现与 ror一样的许多东西。但cakephp的开发团队后来发现php语言和ruby语言存在巨大区别,因此ror中的许多设计即便能够在php中实现,也是缺乏实用价值的。
cakephp在发展中逐步走出了ror的阴影,开始探索更能发挥php语言本身优势的架构和实现。因此有一段时间cakephp的api发生了剧烈的变化,以致其他开发者纷纷停下脚步处于观望状态。
但由于前期一些架构的不合理和对ror太多的模仿,导致cakephp的核心部分越来越难以理解,运行性能也不尽人意。而且cakephp将一个庞大的数据库操作对象作为所有业务对象的基础。这虽然利于快速开发,但却导致对业务逻辑对象的测试非常困难。
对于较小型的项目,cakephp非常理想。北京鲜花礼品出色的快速开发能力、丰富的api和详尽的文档都可以帮助开发者很快完成工作。但随着项目规模的增加,cakephp的局限性也变得突出。
symfony(http://www.symfony-project.com/)
symfony是一个非常成熟的框架,大量利用了已有的开源项目。symfony使用mojavi的核心代码实现了框架的mvc模式,利用 propel作为数据库抽象层。symfony不仅功能强大,而且对ajax有全面的支持。加上官方网站提供的大量文档和教程,并拥有一个活跃的社区,因 此受到许多开发者的欢迎。
但是,symfony最大的问题也在于使用了太多风格迥异的开源项目来组合成框架。由于mojavi和propel本身都相当复杂,因此symfony的结构非常复杂,难以理解和学习。
不过对于希望选择一个框架作为企业内部系统基础架构的企业来说,symfony的成熟度、丰富的文档和活跃的社区都是值得考虑的。毕竟企业内部系统更为看重的是稳定性和长期的支持。
商业利益与大道至简
看到php开发框架的潜在商业价值后,zend.com联合ibm宣布将要推出一个真正能够发挥php优势的开发框架。一时间,这个消息在整个php社区引起了地震。大家都开始期盼这个具有“官方”背景的开发框架能够为php开发者指出一条正确的道路。
不过世事难测,就在zend framework团队公布几个代码片断后,立即就有开发者指出这些代码片段是不可能实现的。事实证明这些代码片段不过是美好的理想。限于php语言本身 的能力,zend framework最终没有实现当初承诺提供的类似ror中activerecord模式的实现品。
zend framework(http://framework.zend.com/)
zend framework大量应用了php5中面向对象的新特征:接口、异常、抽象类、spl等等。这些东西的应用让zend framework具有高度的模块化和灵活性。同时,因为严格遵循“针对接口编程”和“单一对象职责”等原则,让zend framework很有希望成为一个出色的企业应用开发框架hkrfp。
但不幸的是zend framework直到今天,也没有做出更多的突破。在使用zend framework开发时,框架对应用程序自身最重要的领域逻辑分离没有提供任何帮助
