首頁
中文書目錄
原文書目錄
 站內快速搜尋
資源中心
Book Series
Special Interest













■好消息,歐萊禮書籍已重新鋪貨至各大書局及網路書店,歡迎讀者選購       ■歡迎各院校採用歐萊禮書籍,學校團購請洽校園服務團隊

[書籍導讀]

Ruby on Rails– UP and Running
— 開發速度,簡潔,與生產力才是程式設計者的王道!讓 Ruby on Rails 為你解決棘手的程式問題,將你的精力用來解決客戶的創造性想法和需求。

Ruby on Rails 可能是近十年來最重要的開放原始碼專案,為 Web 應用程式的開發帶來全新的變革,讓數以萬計數開發人員的生活變得輕鬆愉快。如果你沒在使用它,現在就開始吧;〈Ruby on Rails:建置與執行〉將告訴你怎麼做。

《美麗新世界》

Ruby 是一種快樂的程式語言,Rails 是一種充滿幸福感的框架,讓人重拾初學 Java 時的澎湃熱情。近來,更因 Ruby on Rails 爆炸性的成長(就像 Java 和 C++ 誕生時的榮景),更讓人了解到,如同 Ajax 一樣,這可不是「吹縐一池春水,隨即消失於虛空」的一陣旋風。

在 Rails 的世界裡,想法正在我們眼前迅速成形,成為業界一股真正的力量。然而,這個現象與你以前所見不同,目前,這股爆炸性的力量正蔓延於開放原始碼社群內,沒有重大的商業投資,並且擁有來自四面八方貢獻者的驚人支援。這股成長力道由一群聰明的核心開發者不斷注入能量,他們瞭解美麗的軟體也可以是強有力的、有用的開發環境不需來自商業公司、以及真正的革新不總是採取你所預期的路徑。希望你已經體察到這種山雨欲來的感受。規則全然在變,歡迎加入這個美麗新世界。

舉個例子,近來,有個很受歡迎的圖片分享社交性網站(類似 FLICKR),叫作 WORDPHOTO(www.wordphoto.org)。作者以 Ruby on Rails 建造此 Web 應用程式,用了 40 個小時完成這個網站(號稱架構該程式只用 5 小時,其餘 35 小時都是在完善細節)。看看 WORDPHOTO這 個網站,從註冊、增加、搜尋、評論、到添加標籤等,多數功能都是很豐富的 — 你一定在想這怎麼可能?恰巧,本書正是以一個圖片分享的 Web 應用程式為例,從軟體安裝、建立應用程式、MVC 架構(資料模型、控制器、表現層)、Ajax 支援、到自動化測試的完成,藉由極少的程式碼(自己寫的或改的),我們完成不少核心功能(具 Ajax 支援),包括以 drag-and-drop 功能新增,重排投影片,以及實際撥放投影片秀等。這是個很棒的範例,帶你一步一步走過,直到完成。對於 WORDPHOTO 的成果,你會相信的!

長久以來,J2EE 著重於複雜問題的解決(以問體為導向),而不是讓編程簡單(以人為本)。直到 Spring 這類輕量化開發框架的出現(再配合 Hibernate 這類優秀的永續保存框架),才為這段如履薄冰的幽暗路程帶來曙光,克服 J2EE 的贅餘層次,再次讓開發工作變簡單,幫助你設計出輕量化應用程式,又能勝任重量級任務。這是在生產力的方向上邁出正確的一大步。然而,Ruby on Rails 直指這個目標 — 開發速度、簡潔、與生產力的王道,提供一種更快速的開發方法,讓我們把精力放在創造想法和滿足需求上。

《Ruby on Rails 的特點》

Ruby 是一種簡單直觀、可擴展、可移植、物件導向的直譯式 scripting 程式語言。

Rails 是以 Ruby 撰寫的完整(Full-stack)Web 開發 框架,目的是以更少的程式碼,更快速開發 Web 應用程式。

Ruby on Rails 的優點在於「簡潔與快速」,兼具 scripting 程式語言 PHP 的開發速度與易用性,以及 Java 結構式作法的「乾淨清楚」。這種組合加速程式的撰寫過程,日後的維護也容易。就像 Ajax 將桌面應用程式與傳統 Web 應用程式的優點結合在一起,Ruby on Rails融合 Java 與 PHP 這兩大極端,讓開發工作變得成既乾淨又俐落。其特點如下:

● 更短的學習曲線:

Rails 是以 Ruby 撰寫的 Full-stack 開發框架,從表現層(視圖、樣板),控制器,資料模型(永續層),到 Ajax 支援等,全都涵蓋。絕大多數情況下,你不必再學其他框架(同樣情況在 Java 裡,你可能要分別了解 JSP、Servlet、Struts、Hibernate、甚至 Spring 等)。另外,你也藉此敲開 Ruby 的大門,良好的學習成效必定讓你興奮不已,更有動力往前邁進。

● 更快速的開發過程、更少的程式碼:

a ) 當你建立 Rails 應用程式時,Rails 即為你建立極為完整的應用程式骨架(skeleton),包含完整的 MVC 架構(view、template、layout、controller、model、helper 等),一組管理應用程式、伺服器、資料庫的 script,甚至測試程式(單元測試、功能測試、整合測試)等。

b ) Scaffolding 與 Mataprograming 的強大能力(後敘),將你對架構與程式碼撰寫所需的心力減到最少。

c ) Rails 將執行環境區分為 development、test、與 production 三種。在 development 環境中,每當呼叫新動作(action)時,Rails 重新載入類別,加上 Ruby 是一種直譯式語言(相對於編譯式),因此,你能獲得極快速的轉迴時間(turnaround time),亦即從你做改變到在瀏覽器裡看到結果的時間大大減少。對開發者而言,這可是一大福音。另外,test 環境與其migration(後敘)的配合,讓測試更容易。

● 中介編程(Metaprogramming)

中介編程技術使用程式寫程式。其他框架則廣泛使用程式碼生成(code generation),程式碼生成賦予使用者一次的生產力推進(one-time productivity boost),但後續工作便幫不上忙,而自訂 script 只能讓使用者把客製化程式碼加到少數精心挑選的地方。中介編程取代這兩種原始的技術,並且消除它們的缺點。Ruby 是中介編程的最佳語言之一,而 Rails 善用這項能力。

● 對映語言(mapping language)

Active Record 使用 Ruby 建立一種語言中的語言。你將使用一種對映語言,指定資料表之間的關連關係。

● Active Record 處理資料模型

Rails 引進 Active Record 框架,它將物件儲存到資料庫。根據 Martin Fowler 所分類的設計模式,Rails 版本的 Active Record 找到資料庫 schema 裡的欄位,並使用中介編程自動將它們指派給你的領域物件(domain object)。這種包裹資料表的方法既簡單,優雅,且強有力。

● 聰明的組態約定

.NET 或 Java 的大多數 Web 開發框架,強迫你撰寫一頁又一頁的組態碼(configuration code)。如果你遵循建議的命名約定,Rails 不需要多少組態。事實上,只要遵循命名約定,往往能削減五倍的組態碼,既使遵循相同命名約定的類似 Java 框架也無法有此效率。

● Scaffolding 的強大威力

在開發的早期階段,你往往需要建立臨時性程式(scaffolding),幫助迅速建立應用程式,看看主要元件如何一同工作。有兩種方式達成 scaffolding:
(1) 透過中介編程產生 Scaffolding(在程式碼裡使用 scaffold 方法),
(2) 透過 Scaffolding 程式碼生成(以 ruby script/generate scaffold 指令,產生 Scaffolding 程式碼)。

第一種方法的主要好處有:此 scaffolding 是動態的,你能以一行程式碼完成許多工作,而不需自己維護。第二種方法的主要好處是:能以 Scaffolding 程式碼作為進一步開發的基礎。因此,兩全其美的作法是:兩種 Scaffolding 都使用。當你在開發早期不時需要修正 Active Record 資料模型時,第一種方法有幫助,稍後,你可再以第二種方法生成程式碼,再由生成程式碼的基礎出發,充實控制器和使用者介面。

● Schema Migration

你可以使用 SQL script,或者使用 migration(遷移)來管理資料庫 schema。如果你決定使用簡單的 SQL script,你將需要建立資料庫專用(database-specific)的 schema,而且,每當你建立新資料表時,你最後或許還要建立新測試資料。Rails 給你另一種更好的選擇︰schema migration。你必須事先多做一點工作,但是你將能指定資料庫獨立(database-independent)的 schema,並且改善你的資料庫,而沒有遺失舊有資料。另外,在版本控制與要遷移到哪個版本也能隨心所欲。

● 絕佳的 Ajax 支援

Rails 使用 Prototype 和 script.aculo.us JavaScript 程式庫,實作 Ajax 支援。你可以獨立於 Rails 之外使用這些程式庫,但是它們與 Rails 之間的整合算是天衣無縫,例如,在本書第六章,我們以不到 200 行的程式碼,便完成不少具 Ajax 支援的核心功能,包括以 drag-and-drop 功能新增,重排投影片,以及實際撥放投影片秀等。

● 內建測試

Rails 建立你能加以延伸的簡單自動化測試。Rails 也提供稱為 fixture 的支援程式碼,讓測試案例更容易撰寫及執行。然後,Ruby 能利用 rake 公用程式,執行全部的自動化測試。

● 三種環境︰開發、測試、及產品

Rails 給你 3 種預設環境︰開發、測試、及產品。每一種環境在行為上略有不同,讓你的整個軟體開發循環更容易。例如,Rails 為每次測試的執行,建立未經加工的測試資料庫。

● 其他功能:

為重利用視圖(view)程式碼的 partial 與輔助器(helper)、內建快取、郵件功能框架、像是檔案上傳之類的簡單任務、可支援 Security 的登錄產生器、以及 web service 等。

這些特性共同構成 Ruby on Rails 能兼顧開發速度,簡潔,與生產力的主因,藉由本書的介紹與範例程式的一步步完成,讀者必能有所體會。

《本書內容》

《Ruby on Rails:建置與執行》對相關參考手冊不多作贅述,或者取代你用 Google 就能找到的資料。相反地,它努力帶給你 Rails 應用程式怎樣完成的整體圖像,並且告訴你那裡可找到各章中所未包含的資訊。透過理解此整體圖像,你將能夠仔細且充分利用參考手冊。

本書將基於端到端(end-to-end)應用程式的情境,為你建立理論基礎,帶領你一步步完成 Photo Share 應用程式 — 一個比部落格或購物車要求更高、但結構簡單的專案,Rails初學者將能迅速理解其內涵真義。從軟體安裝、建立應用程式、MVC 架構、Ajax 支援、到自動化測試的完成。我們完成不少核心功能(且具 Ajax 支援),包括以 drag-and-drop 功能新增、重排投影片、及實際撥放投影片秀等。這是個很棒的範例!

《本書章節說明》

全書共分七章,外加二個附錄,主要由下列主題組成︰

  • 使用 Active Record 操作資料模型。
  • 使用 Migrations 修改資料庫。
  • 為資料表間的關連關係塑模。
  • 兩種 Scaffolding 的使用。
  • 建立 controller 表達應用程式的操作與行為。
  • 以樣板開發 HTML 表現層。
  • 將 Ajax 功能注入應用程式
  • 單元測試,功能測試,以及整合測試
  • 環境的安裝與建置(附錄)
  • 快速參考(附錄)
探索 Ruby on Rails 的美麗世界時,你可以從網際網路上取得許多有用的資料(也許是太多),然而,你最好先有個正確的整體圖像與觀念,才能事半功倍。藉由閱讀本書,實作 Photo Share 範例,建立你的整體圖像與觀念。打開電腦,循著本書,動手試試吧,很有趣的!

楊仁和
18/10/2006

| 首頁 | 聯絡我們 |
© 2009, O'Reilly Media, Inc. Taiwan Branch