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