欢迎来到Kittow的部落格! - http://blog.skyhe.com
Agile Web Development (敏捷Web开发)
Want to Know Something More? Move Your Mouse Here;)我是天空的一片云,偶尔投影在你的波心,你记得也好,最好你忘掉,你我在交汇时,互放的光亮。
——徐志摩《偶然》 More...
ASP | ASP.NET | PHP |
ColdFusion | Perl | Python |
我是天空的一片云,偶尔投影在你的波心,你记得也好,最好你忘掉,你我在交汇时,互放的光亮。
——徐志摩《偶然》 More...
此后一段时间,就一直在看这个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