最近一位网友推荐我看一个很特别的框架 CakePHP(http://www.cakephp.org)。我大概看了一下,觉得还是很不错。看到作者说其灵感来自Ruby on rails(http://www.rubyonrails.org),就跳转过去,想看看这个灵感源泉到底是什么东西。打开Ruby on rails的网站,粗略看了几段,发现居然有宣传视频下载,马上down了下来。
看完这15分钟的视频,我第一个想法就是:这才是真正的快速开发!紧接着,我就觉得我做的pfc实在太垃圾了。看了视频不过瘾,立刻跟着教程下载安装了一份,并一步一步地做了个blog程序出来(虽然很简单,但是基本功能都有了)。
此后一段时间,就一直在看这个Ruby on Rails的文档,从中收获颇丰!
Ruby on Rails有三个基础成员,一个是Active Record,另外两个是Action Pack和Action Mailer。Active Record是一个数据库和对象之间的映射系统,Action Pack实际上是一个前端控制器及其相关的东西,最后的Action Mailer是SMTP组件,用来发邮件。
Action Pack没什么说的,也就是处理HTTP请求,然后调用不同的Action代码,和PFC/Flea里面的WebApplication类本质上功能一样。只是Action Pack提供了很多默认实现和非常丰富的Helper(助手)。而Action Mailer则可以忽略,PHP中已经有很成熟的实现了。所以,我最关心的还是这个Active Record。
简单来说,Active Record通过自动映射数据表和类对象来简化数据库访问操作。例如最常见的Create、Read、Update和Delete操作,几乎不用写一行代码就能实现。而我们常见的开发中,很难做到这一步。如果Active Record只是提供了简单的CRUD自动化操作,那也没什么过人之处,毕竟实现这个很简单。Active Record真正的闪光处在于其超方便的关系映射功能。
举例来说,我有一个表保存发表的文章,名为post,而另一个表保存文章的类别,名为class。如果我们要将这两个表通过 class_id 字段关联起来,通常需要自己写程序。而使用Active Record,我们只需要一行代码标明post从属于class就行了。当获取post记录时,相关的class记录会自动获得,反之亦然。
Active Record具体的实现我还没有搞明白,但这种设计带来的开发效率提高是非常惊人的。除了改变关系映射,大部分时候数据表的修改根本不需要改动代码。增加一个字段?没问题,Active Record会自动映射这个字段,而不需要你改动代码中的数据表结构定义(很遗憾,事实上代码中根本没有数据表结构定义)。
作为Ruby on Rails的PHP复制品,CakePHP目前已经大体实现了Action Pack,而Active Record还只有初步的CRUD功能,不过相信作者会很快实现。
不过,我对于完全照搬Ruby on Rails还是持保留态度。首先,Ruby语言是完全的OO语言,具有丰富的语言特征。而Ruby on Rails框架就大量使用了反射来实现各种自动化操作,而这些是PHP目前无法做到的。而且CakePHP是基于PHP4而不是PHP5开发,这更进一步限制了发挥余地。所以CakePHP中的例子代码看上去总是有一种怪怪的感觉,既不直观也不易懂。
目前,我正在做一些试验。主要是探索如何实现PHP版的Active Record。如果成功,那么Flea就将获得一个重型武器,可以让开发效率提升到全新的层次。
http://www.dualface.com/blog/2005/09/ruby_on_rails.html
当前评分 2.4 , 共有 16 人参与
- Currently 2.4375/5 Stars.
- 1
- 2
- 3
- 4
- 5