2nd 2005.7.15 加入与J2EE内框架的对比。
Java世界里几百个ORM Framework和MVC Framework妖精打架,吸引了全世界大部分目光的时候,Ruby on Rails悄悄出现了。
优点
1.简洁。因为是Pragmatic Programer那帮子人搞出来的东西,所以非常Pragmatic,Ruby本身的动态语言优势加上强悍的、高度自动化、疯狂使用了反射的基类,使得Rails的代码量只有Struts/Webwork+Spring+Hibernate的N份之一,默认的CRUD系统,只需要一行代码。
2.性能。据评测,速度居然还比Struts+Spring+Hibernate的速度快15%-30%。
3.良好的语义和领域驱动开发。
我觉得这点是最重要的,Active Record采用了与Hibernate的Data Mapper不同的另一种领域模式--Active Record,获得了最直接的DDD模式。而Action Pack也吸取了众多MVC框架的优点,同时去掉了他们的复杂性而成为亮点。还有Ruby能把语义定义得像DSL一样。让编程语言口语化也是我所关注的。
vs J2EE (first round)
因为以上优点,说它悄悄出现其实不全对,已经有不少人开始不安的拿Rails与java的方案作对比,结果不外乎,Rails在中小型项目表现很好,但还不能适应复杂的商业逻辑。但是,就像EJB说别人不支持分布式一样,是不是真有这么多复杂的模型和逻辑呢,而且,Rails还在发展,以后如何还未知。
学习目的
一来可以在中小项目里直接应用Rails从而获得N倍的开发速度,
二来更重要的是反过来影响在Java World里面ORM,、MVC的设计思路,改善自己的框架。
而且,Rails的入门有个特点,花上15分钟,写一行代码,就能实现第一个完整的CRUD系统,不像别的语言只能打印一句Hello world,真正useful的话要搞半天。
架构
ROR的架构图如下,服务器是Apache,根基是我认为最简洁的MVC方案--Action Pack和最DDD的ORM方案--Active Record,再加上类似JSP的view template和小小的代码生成器,就是Rails了。
vs J2EE (second round)
IBM DW上的文章 Ruby on Rails and J2EE: Is there room for both?有详细的对比,推荐
可见,两者都是基于MVC与ORM模式,但两者的实现哲学不同。
MVC层,两者都是基于FrontController模式,通过DispatchServlet/ActionServlet ,把request映射到恰当的controller。不过Struts需要用xml详细配置每一个映射和Forward,而Rails则按照默认原则进行配置。
另外,Struts提倡每个ActionServlet完成一个动作,而Rails提倡把一组相关的动作放在一个Controller中。
ORM层,Data Mapper与Active Recorder模式的区别相当大。
Hibernate的Data Mapper模式,需要由Session充当Mapper 对POJO在DB之间进行映射。
Active Recorder模式则是让POJO封装DB中的一行数据,同时拥有CRUD的默认操作,针对一组POJO的操作如find, delete,则放在类的静态方法中。因为没有了作为Mapper的Session,整个程序很自然,很DDD。
学习资料
0. 隆重推荐
koalant的Ruby on Rails实践 (中文版,文笔清晰,看完它基本不用再看其他教程了)
1. 快速指南
Rolling with Ruby on Rails part1,part2
用Rails创建web应用
2. Ruby资料
《Programing Ruby 2nd》Progmatic bookshelf成员,第1版是免费的,随Ruby安装包附送。
而包含了最新Ruby1.8的第2版要收费,好在Emule上可以下到电子版。
《Progarming Ruby 1st》的部分中文翻译
3. Active Record和Action Pack的资料
Active Record
Action Pack
4.Rails作者及其他Rubyer的blog
David H. Heinemeier--loud thinking Rails的领导者
Andy
Dave Thomas
5.Ruby站点
Ruby on Rails
RubyForge Ruby的SourceForge
RubyGarden
Ruby中国
Ruby-CN
相关blog
1.Hibernate3.0 vs Rails Active Record