轉自:http://ihower.tw/blog/archives/1743前端
繁體字看着頭痛,轉成簡體字給你們看數據庫
知名的 Web design 在線雜誌 A List apart No.257期少見地刊出 Rails 入門介紹,心血來潮來作翻譯,斷斷續續翻潤了好幾回,以爲文章看起來沒什麼,翻起來好長啊。
終於再度體會 text.plain 果真是最難寫的格式。寫投影片,作翻譯比寫程序還辛苦…orz後端
如下翻譯自 Creating More Using Less Effort with Ruby on Rails by MICHAEL SLATER 設計模式
若是你開發網站,想必應該聽過 Ruby on Rails (RoR) 的大名。可是若是是網頁設計師或前端工程師,或除了PHP沒有用過其它框架,那麼採用 Ruby on Rails 方案彷佛會是一個很大的改變。在這篇文章中,我但願可以除去 Ruby on Rails 神祕的面紗,並說服你採起行動,這將會很是值得若是你的需求符合下述的 Ruby on Rails 甜蜜點。瀏覽器
學新方法去作原本就會作的事情,還要同時學新觀念和新技巧,確實會花你一點時間。直接了當地說,即便是 Ruby on Rails,轉換技術都將會摧毀你的生產力。然而,我相信網站開發者若是開始採用 Ruby on Rails,將變得更有生產力作出更好的網站,以及從中得到更多的樂趣。ruby
Ruby on Rails(簡稱Rails)是一個完整的框架,意思是說他包含了前端跟後端。它讓 「要作多種不一樣工做的人」 開發者能擁有極強有力的工具。即便基本上你只是前端或後端工程師,你仍能夠有效率的使用 Ruby on Rails。咱們能夠清楚定義前端(瀏覽器HTML、CSS和JavaScript)和後端(Ruby和Rails框架)的接口,因此若是你只想要專一在其中一端的話,不須要全盤瞭解。網絡
若是你是網頁設計師或前端工程師,你會學到如何使用 Ruby on Rails 樣板系統,並且學一點內嵌Ruby程序代碼在 View 檔案。這將讓你成爲後端開發者更好的夥伴,由於你能夠直接操做 Rails 應用程序,而不是讓某人去整合HTML和CSS。前端工程師
所以不管你用前端或後端工程師的角度採用 Ruby on Rails,能夠想一想看有哪些項目能夠考慮採用?架構
Ruby on Rails 是 Basecamp、Blinksale、43Things、Odeo、Revolution Health、Twitter、YellowPages.com和 A List Apart 這些網頁應用程序和網站的核心。這股Rails熱情也擴展到許多大網絡公司。Yahoo、eBay、Amazon和 AOL 都有 Ruby on Rails 專案,而ThoughtWorks 也正在創建Rails企業級應用程序。可是這麼多不一樣的 Ruby on Rails 應用程序,有幾個重要的共通最適關鍵。框架
當一個網站或網絡服務有如下三個特色的時候,最適合採用 Ruby on Rails 方案:
1. 一個數據庫形式的網站(譯註:一個透過存取數據庫,動態產生內容的網站) 或有足夠規模到適合使用一個強大功能的框架。
2. 一個特別而不適用於傳統的 CMS 系統 (若是 Joomla 或 Durpal 徹底符合你所需,這些系統會是更好的選擇)。
3. 一個全新的應用,容許開發人員開始全新的數據庫跟軟件架構。
這些是 Ruby on Rails 應用程序的甜蜜點。應用程序若有這些特性,一旦決定投入學習Rails,採用 RoR 將極可能會比 PHP、.NET或Java 開發的更快速。
一個最主要的理由就是 Ruby on Rails 增長生產力:創建新的應用程序、增長新功能變成容易地多。結合程序語言(Ruby)和框架(Rails)意指你將能夠用更少程序代碼。更少的程序和更好的架構表示當要改變時相對無痛,因此你能夠迭代和實驗更樂意。這將帶咱們有更好的網站,並且懷但願地更有樂趣去建構網站。
固然,採用主要的新工具須要時間的投資,一時沒辦法輕鬆。若是你正專一在一項目,可能不是很適合。可是若是你須要持續建構網站,並且是有必定程度的複雜,一個短時間學習 Ruby on Rails 的投資,長期來講將會是值得的。
要了解我會爲何相信你能夠用 Ruby on Rails 作更多事且寫更少程序,讓咱們快速看一下 Ruby。
Ruby 是個現代的對象導向語言。在任何 Ruby 程序裏,全部東西都是對象。Ruby也是一個動態語言,這表示:
Ruby 被動態直譯(就像PHP),因此沒有編譯(像C或Java)。這加速了迭代式開發。在Ruby裏,變量被使用的時候才被動態指定一個型別,下降了在其它程序語言必須定義跟設定變量。一個Ruby程序能夠動態產生程序,修改即便正在執行的本身。Rails內部就使用這個能力,來讓你能夠簡單享受所謂的 「Magic」。(你不須要了解到底這個技巧如何運做)
Ruby 是一個讀寫很是美妙簡潔的語言,可是他的優勢不僅如此。正由於Ruby能夠被強力擴展,Rails框架才能夠將他轉換成像是建造網站應用程序的專用語言。
Ruby(語言)和Rails(框架)是兩回事,他們彼此在不少地方相輔相成。全部 Ruby on Rails 應用程序由Ruby寫成,而Ruby的特性帶給Ruby on Rails很大的影響。有些框架,像是 CakePHP,帶了不少 Rails 點子過去。可是Ruby的能力和彈性給了Rails比許多別的框架更多清楚和彈性。若是你正打算投資學習一個框架,學習Ruby並不會是很大的障礙,並且回報至關可觀。
許多網站並無使用任何應用框架:你就寫你要的程序和儘量處處複製貼上你所需的程序。對小網站來講這ok,可是很快你就會失去控制,亂七八糟的程序代碼將很難理解與維護。
使用像 Ruby on Rails 這樣的框架,不少關於如何組織你的程序代碼的決定早就已經爲你想好了,並且還有一堆可供挑選使用的函式庫。
另外一個重要的Rails特性是使用 model-view-controller (MVC) 結構來組織每個應用。 MVC 是一個組織軟件項目的良好設計模式,當你有不少網站或有新人加入工做時,它將帶給你程序代碼一致性的結構。它提供個別獨立的檔案,有着乾淨的接口能夠分開前端與後端的開發者。
Ruby on Rails 被設計成用來建構數據庫應用程序,其中許多核心組件專一在與數據庫的互動。Rails的核心函式庫稱做 Active Record,它實作了被稱做對象-關聯對應(ORM)。有了ORM,你能夠操做表明數據的軟件對象,而後 Active Record 函式庫將會處理與數據庫的操做。
這聽起來可能有點抽象神祕,讓咱們更具體些。即便不知道任何 Ruby 或任何對象導向語言,我打賭你也能夠對下列的程序代碼範例有感受,如下是實際的 Ruby on Rails 程序代碼。
假設你有一個書店網站,你想要加入一本新書。你能夠這樣寫:
newbook = Book.new
你正告訴這個 「Book」 類別你要一個空的 book 對象,稱做 「newbook」。你能夠設定標題或任何其它屬性,直觀以下:
newbook.title = "Angle of Repose"
newbook.author = "Wallace Stegner"
在這同時,你有一個對象在內存。這時你須要的是:
newbook.save
…而後你的新書將會被寫入數據庫。Active Record 產生 SQL 告訴數據庫插入一筆數據。你還能夠只用少少幾行的程序代碼就能夠作字段檢查,併產生錯誤訊息。
如今你想要在成千上萬中的數據庫找那本書。只要寫:
angle_of_repose = Book.find_by_title "Angle of Repose"
…因而你獲得對象被稱做 「angle_of_repose」,它有着全部從數據庫撈出來的數據。
固然還有更多,不過也不會太多了; 操做對應網站數據的軟件對象是如此天然有威力的方式。在RoR,你有豐富的軟件對象對應到你的數據庫表格,這些對象被組合成 MVC 系統中的 「model」 層。
你的程序代碼與 model 對象互動,而後 Active Record 產生 SQL 讓數據庫如你所寫。你不須要撰寫任何數據庫SQL語法。正由於不須要讓你的程序與數據庫直接溝通,你也能夠透過更改設定輕鬆更換數據庫軟件。
要創建網頁,Rails 提供樣本系統能夠輕易地使用一致的網頁結構,插入相同的組件不須要重複程序代碼,展現來自數據庫的數據,顯示並處理窗體。這些樣板組成MVC系統的 「view」 層。
若是你是前端開發者,這是 Rails 中你應該特別專一的部份。你能夠簡單假設你的 「view」 檔案將會處理任何你要顯示出來的數據變量。正如同 PHP 檔案混合了 PHP 程序代碼和 HTML,一個典型的 Rails view 也是混合了 Ruby 和 HTML。繼續咱們的書店範例,這裏是一段 view 程序代碼顯示書的標題和做者:
<h1><%= book.title %></h1>
<p><%= book.author %></p>
Ruby 程序代碼被標記成 <%= and %>; 其他則是HTML。HTML和Ruby程序代碼的輸出結合後,創建出網頁。
Rails 被整合成支持 Prototype 和 Scriptaculous Javascript 函式庫,再加上一個稱做 Ruby JavaScript(RJS) 用來建構 Ajax 使用者接口的厲害機制。你能夠用 Ruby 幾乎徹底全部事情,包括最終被執行在瀏覽器的 Javascript 程序代碼 (Rails 框架會處理這些轉換)
一個 「controller」 是一整塊Ruby程序代碼用來與 Model 溝通,並準備數據給 view。任何view所需的數據都會先在 controller 用一組變量所組成。這個 controller 也在頁面加載好之後響應 Ajax 的需求。Controller 也提供多種其它功能,從使用者認證到錯誤處理等。
Rails 試圖努力對任何事情都去提供一個合理的默認值。根據這個稱做慣例勝於設定的哲學,Rails 大大下降了設定檔的須要。
若是你依照Rails的慣例,將會有使人驚豔的成果,從路由request對應到正確的 controller 和 view,到驗證窗體數據和顯示錯誤訊息,均可以直接運做。與其它語言和框架比較起來,它使用了更少程序去達到更多常見的任務。
慣例勝於設定的方式對初學者可能會有點挫折,特別是若是是從一個已經存在的應用程序開始用起,由於會有隱藏的假設藏在程序代碼裏面。這些假設會讓程序簡潔,可是當你不知道的時候也會形成困惑。但當你學習Rails慣例以後,Rails的全部事情就會變成有意義了。一旦當你建構全新的網站時,你將如虎添翼般,由於有這麼多已經爲你定義好的東西。
Rails 的確有它的缺點。當應用程序知足上述的甜蜜點時,這些缺點能夠被忽略不計,可是在極端狀況倒是很大的問題。
Ruby 比大多數其它程序語言還來的慢。固然這幾年將會改善,可是他對少數應用程序來講這是一個缺點,的確是個問題。不過實際上對絕大多數的網站這並非問題所在。
對 MVC 框架的架空使用也將拖慢速度。仔細看大多數的Rails應用都執行良好,可是不少 Model 操做均可以經由調校下降對數據庫的存取次數。你經常能夠完全地下降數據庫操做:Rails 包含了強而有利的快取系統,經常被存取的網頁能夠只被創建一次,而後被讀取不少次。
Rails 應用程序也經常在hosting比PHP碰到更多的麻煩。由於Rails