头一低,很多年都这样过去了...

欢迎来到Kittow的部落格! - http://blog.skyhe.com

Agile Web Development (敏捷Web开发)

Want to Know Something More? Move Your Mouse Here;)

我是天空的一片云,偶尔投影在你的波心,你记得也好,最好你忘掉,你我在交汇时,互放的光亮。
——徐志摩《偶然》 More...

我的VOA听写积分

2005-10-17 [返回]
[转贴]Ruby on Rails — 真正的快速开发
最近一位网友推荐我看一个很特别的框架 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
转自:天河网 | www.skyhe.com

Posted at 10:35 AM | Comments[0]

转自:天河网 | www.skyhe.com

发表评论
We Used Ajax to Post Your Comment!
本站评论系统采用Ajax技术,无刷新发送评论
您的大名 *   
电子邮件  
5+6=? *(请输入“5+6=?”的结果)
评论内容 *