Rails Philosophy

最近有一個機會,用到Ruby on Rails來開發系統,或許有點遲,但跳脫Java的角度來看,真的是一個很難得的經驗。

在Rails philosophy中,有三大guiding principles


DRY–Don't Repeat Yourself
Convention Over Configuration
REST is the best pattern for web applications


其中「Convention Over Configuration」讓我印象最為深刻。

在習慣Java世界的我,什麼東西都要來個設定檔,不管是Spring的設定檔、Hibernate的設定檔、Log的設定檔…等,好像沒有設定檔,就缺少了些彈性似的。

第一次使用Rails的時候,使用

ruby script/generate scaffold XXX


生成程式及頁面後,就開始尋找Table跟Object對應的設定檔在那裡?但怎麼找都找不到。原來,根本就沒有設定檔。
怎麼那麼怪~~~那我怎麼知道Rails幫我做了什麼?

做了幾個功能後,又問了一次自己,如果按照Rails的Convention,都幫我弄好的話,為什麼一定要自己設定呢?
再做了幾個功能後,哇~~這真的太方便了。會有那種欲羆不能的感覺。

(不過,缺點就是比較沒有經驗的開發者,那可能會功能做完了,都不知道為什麼,這樣可能造成日後做進階修改的時候,會很痛苦!!)

另外,再舉兩個,我覺得超方便的例子

(1)有一個下拉式選單,其資料要從某個Table中取出。

在Java中,會寫一個DAO / Services,再透過DWR來取得,或是寫成Taglib來取得。
在Rails中
<%= f.collection_select(:project_id, Project.find(:all, :order=>"showorder"), :id, :name, {:include_blank => true}) %>

一行就完成了,我要取得Project這個類別/Table的所有資料(當然也可以有過濾條件),並以showorder排序,這個Select的第一個,請放一個空白。


(2)我有一個查詢頁面,其時間的起迄,是今天的上二個星期,其下二個星期

在Java中,可能使用JavaScript去計算,或是用Java的Calendar來計算。
在Ruby中

2.week.ago  #開始日期
2.week.from_now #結束日期

對,你沒看錯,就是這麼直覺。還有更多更直覺的

Time.now.end_of_month       #這個月的最後一天
Time.now.beginning_of_week  #這個星期的第一天

這真是太神奇了,傑克。目前跟RoR接觸的時候還算短,若之後有機會,應該可以發掘更多令不讚賞的東西。

PS.這次做的小系統,也有整合 Fusion Chart 來展現報表,也是一整個方便跟快速。

留言

Jonathan寫道…
Ruby就是這麼神奇,所以前陣子非常非常盛行~
超越Java,這本書的作者就是輕快的好Java共同作者之一,他在這本書中非常推崇Ruby,Ruby優點跟先進之處很多,但是我在使用上的感覺是缺乏一個很好的IDE,或許Netbeans或是Eclipse外掛已經做到很好,這方面我也很久沒有update了 :P
ilin Huang寫道…
哈~~我就是用NetBean 6.8,整個跟JRuby整在一起,不過還是沒有Eclipse來得習慣跟直覺。還是format sourcecode的快速鍵,就是一整個不順
Jonathan寫道…
JRuby如果我沒有搞錯,就是可以把Ruby compile成在JVM上可以run的bytecode吧? 這樣讓可以快速開發的Ruby在廣大的Java平台上跑~ 但是有些東西有點混淆,到時候再問你好了 XD

熱門文章