首頁‎ > ‎電子期刊‎ > ‎Ruby on Rails‎ > ‎

介紹Ruby On Rails(上)




摘要

  • 作者:李開文

介紹Ruby On Rails(上)

本篇文章從PHP及Web程式設計師的角度,逐漸帶出Ruby on Rails這個Web Application Framework及其優點,架構觀念。接下來要簡介Ruby及Rails的學習重點。

這篇文章也同步地發佈在我的Blog上

http://kiwi.csie.chu.edu.tw/blog/archives/133

 Web應用程式

記得在上次的的主題,重新探討Cakephp, Ruby on Rails與MVC,我大力地闡述能否實做商業邏輯,或是掌握Model的功用是多麼的重要。而老話一句,這個問題比較會出現在中大型的Web應用程式中,如果說你正在寫的是小小的網頁作業,或許本文對你只有參考的價值。

我會這樣說,是因為我們已經邁向2008年,Web應用程式在Google大神的帶領之下 ,逐漸開始在放出光芒。

在2005年以前,對於很多使用者而言,瀏覽器只不過是個看網頁的東西。而網頁對大多數設計者而言,製作網頁就像在畫一幅畫。動態網頁設計被分做四大領域,平面設計,結構設計,行為設計,伺服端程式設 計,而這些設計可能會各別使用典型的Photoshop(or Flash),HTML/CSS Editor,Javascript Editor,PHP來完成。然而我舉PHP的例子,大家也應該可以想像的到,它是這五六年間最熱門的伺服端程式語言,如phpbb, phpmyadmin,xoops等高水準,開放原碼的應用程式大家早就耳熟能詳。相較於當時任何可以做出成品的伺服端語言,其直譯式語言的優點,快速編 輯,方便佈局(deploy) ...說到要寫動態網頁,PHP真是首選!

而這些東西在2006年之後就起了大變化,主要還是因為使用者比以往需要更多從瀏覽器得到的資訊,不僅只是看個靜態的網頁,更是將資料傳送 出去。當人們開始這樣用Web表單不斷地把資料往Internet送,並期待畫面下一瞬間就有符合需求的東西的時候,已經不是在「看網頁」,而是在使用Web應用程式。是的,Web應用程式這個名詞其實還並未真正的深植人心,因為非資訊領域的使用者他們對於Web的認知還是僅僅在於靜態網頁,而資訊領域相關的已經對Web有種使用視窗程式的印象。實際上不管是Google也好,博客來也好,大家都是在用Web應用程式。

從設計者的角度來看,大概在PHP成為主流的時候,重心已經從平面設計逐漸轉移到伺服端程式設計。舉個例來說,你會發現外包網頁製作工作室 來製作官方網頁的業者,在快要完工時,針對內容資料性及操作性正確與否的要求,遠比Flash動畫順暢度及效果還要來得優先(以往是剛好反過來,美工優 先)。就像你使用Word,先不管他的介面是否如Word 2007般炫麗,可是在程式上看到的的排版,跟列印出來紙張上的排版一定不能不一樣。由於PHP連結資料庫的功能相當穩定,解決了資料及操作性的問題後, 設計師們慢慢地就將焦點拉回到Web應用程式的反應速度上。包括平面設計師在內,許多人無一不想讓Web程式像是視窗程式一樣反應快速,也因此將大家遺忘 許久的Javascript找了回來。

PHP面對的問題

從2000年到現在,設計的重心大概是依照HTML -> PHP -> JS來演進,語言的特性也從Tag Language -> Script -> Pure OO Script演進。這樣子的演進,不僅說明了伺服端程式碼的彈性相當重要,因為你可以看見大家不再需要靜態的HTML而是可以產生動態HTML的PHP, 而更明顯的是,大家開始需要瀏覽器的彈性。

在這時代演進中,PHP程式設計師遇到許多問題像是:

  • PHP並不是一個很好的物件導向語言,直到PHP5的時候雖然有,不過也不夠完整。
  • PHP原本附的資料層函式及PDO,或者是Adodb,要進行複雜的關連設計與對應相當困難。能夠做到複雜關連的如Propel,卻又效能太差。
  • 樣版引擎的優點是快速,可是只能稍微簡化畫面的結構問題,並未能解決商業邏輯與控制程式碼混雜問題。
  • 綜合以上原因,如果你要撰寫一個有500個使用案例的大系統,會導致設計複雜化。
  • Framework如Cakephp解決了不少上述問題,可是因為多數Framework開發週期過長而使得普及率未如想像中高。
  • Web應用程式因為HTML,CSS等本來就需要打許多程式碼,但PHP也佔了相當多。因此要完成大系統,需要更多人力進行實際程式碼撰寫而無法將時間花在設計上,開發時程也相對拖長。

我們在面對的已經是上百個使用案例這樣的複雜Web應用程式,競爭對手如Adobe已經推出了AIR(前Apollo),微軟也推出了 ASP.Net Ajax與Silverlight。這些強勢的對手們,目標當然是更強的Web Framework。PHP的任何framework甚至函式庫,是否能有效地"Rapid Development"都是一個問題,更何況是要挑戰這些對手。

Ruby on Rails

Ruby on Rails這個Web Application Framework早在2004年7月的時候,就由David Heinemeier Hansson率領著37signals打造了一個專案管理系統叫做Basecamp。 先不管Basecamp好不好用,而它帶來的影響力就是大家都會問說「這究竟是怎樣寫的?」,也跟著Web2.0的風潮風光了一陣子,之後Rails才逐 漸浮上抬面。一個軟體要有人用,在於設計符合使用者需求,而又讓他們感到習慣的介面。但如果今天所謂的使用者也就是寫程式的人,那他們的希望就是,要能夠 有效率地做出或者維護一個系統及其使用案例,有方便的API可以降低反覆打同一行程式碼的動作。

Rails的第一個最大的優點就是,他可以以同一個語言加上簡短的函式呼叫囊括結構(HTML),行為(Javascript),及伺服器程式語言(Ruby)設計

我自己都認為光這一點對很多人來說就是救星了。

至於第二大優點,那就多了~

stacks.jpg

對於一個有經驗的Web程式設計師而言 Rails具有下列優點:

  • 簡短的函式呼叫,拯救你快殘廢的手指
  • MVC的設計架構讓你的資料及商業邏輯,控制程式碼,畫面完全分開,"No More Spaghetti Code!"
  • ActiveRecord讓你不需要撰寫SQL,並使用Object-Relational Mapping(物件-關連資料庫映射),與Hibernate同等級的關連功能存取資料庫
  • ActionController讓你有完全控制HTTP Session, Cookie, Request, Response的能力,整合了REST改變以往你對資源控制的想法,幾個基本的method就讓你寫完CRUD(新增修改刪除)。
  • ActionView讓你可以使用簡單的函式呼叫就產生複雜的HTML表單與Ajax Javascript程式碼。
  • 專業的Web設計師都懂得要先思考整個網站的Layout在去建構各個畫面,使用Layout更能發揮你的專業。
  • Rails不見得只是讓你Quick'n Dirty弄出個雛形,而且你絕對可以依賴Rails團隊的軟體品質而開發出更棒的產品。不怕你將Rails的功能挖完,只怕你還沒挖完Rails又出新功能!

對於一個Web程式設計新手,Rails帶給你的是:

  • 採用Ruby這個純物件導向直譯式語言,怎樣寫都可以work的程式風格會讓你快速就上手。
  • Rails在各種平台都有快速開發套件包,Windows是InstantRails,Fedora6上打yum install rubygems即可。隨後在指令模式打上一行 gem install rubyworks -a,啥都幫你裝好。
  • Aptana IDE(前RadRails)採用Eclipse開發而成,能控制Mongrel伺服器,也能除錯程式碼,將HTML,CSS,JS,Rails整合的相當好。
  • 不會連MySQL,PostgreSQL?沒關係,把帳號密碼等資訊打在database.yml裡,還可以利用除錯Console測試連線。
  • Rails可以使用Scaffold(鷹架)建立基本的CRUD,甚至還支援漂亮的Ajax,彈指之間你發現你已經寫完了,而還不敢相信自己寫完了。
  • 既然畫面做完了,開始想怎樣修改既有的東西,利用Aptana下方工具列的Generators,你可以產生Model, Controller...等各種Rails程式碼框架,不用一一宣告半天。
  • 嫌功能不夠多嗎?察看Aptana下方工具列的Rails Plugin,看看你想加啥功能!
  • 低坡度的學習曲線讓你相當有成就感,不會像老前輩們以前天天踢鐵板踢到腳酸~

我相信Rails團隊是本持著對設計師們體諒的心,加上未來的夢想在設計整個framework,而不是在展現編程的實力堅強,這也是以往各種函式 庫做不出來的,相當值得所有設計師們學習。在撰寫這篇文章的時候,我也想過是否該提提Python及Django,因為他們也做的很好。

結語

本集從PHP及Web設計師的角度切入來介紹Rails的優點,下集我將會介紹如何學習Rails。


Comments