企業 Rails
2006 年 7 月 11 日
在新成立的 Rails 社群中,「企業」這個詞逐漸成為一個髒字。對許多人來說,Rails 框架以其激進的簡潔性,與過於複雜的 「企業」 框架形成鮮明對比。
在最近的 RailsConf,PragDave 的開幕 主題演講 突顯了 Rails 的許多未解決問題,其中有幾個涉及處理這些企業問題。這方面的例子是他呼籲支援更多樣化的資料庫結構,例如具有複合主鍵。
DHH 對此的回應是斷然拒絕。DHH 巧妙地視覺化操作他最近的 Wired 封面,將自己投射為軟體世界的 Neo,有力地宣稱自己處於更好的位置,並告訴企業界他們需要加入他,而不是相反。將此原則應用於複合鍵,反應是「不可能」。Rails 將執行它所做的事情,並且不會為了支援它不喜歡的事物而讓自己變得複雜。
以下是一個具體的例子,說明了 Rails 如何成為「有意見的軟體」。在 Rails 思維中,如果你讓你的資料表與你的物件同構,並為你的資料表提供代理、整數主鍵,生活會簡單得多。如果你按照 Rails 的方式進行,生活會很輕鬆;如果不是,請使用其他東西。
我承認我喜歡這種有意見的態度。也許這反映了我的 Unix 背景,它蓬勃發展於許多專精於單一功能的工具,而不是一個嘗試執行許多不同功能的複雜工具。我喜歡 Rails 的專注力,它決心選擇特定類型的應用程式並提供良好的服務。
從這個意義上來看,我看到 DHH 和 Kent Beck 之間驚人的相似之處。對於他們兩位來說,如果你讓他們面對一個受限的世界,他們會審視我們視為理所當然的限制,認為它們是不必要的,並創造一個沒有它們的世界。我沒有這種特質,我傾向於在限制中嘗試逐漸推進,而他們只是在限制下放一些智力炸藥,然後繼續前進。這就是為什麼他們可以創造出像極端程式設計和 Rails 這樣的東西,這些東西確實給產業帶來衝擊。
在 PragDave 的演講背後隱藏著更深層的擔憂。就像我一樣,他這輩子花了很多時間與無法使用炸藥的人合作。當你需要從資料管理小組運行的資料庫中取得資料,而且該資料庫已經使用複合鍵運行了十年,你不能只是戴上酷炫的太陽眼鏡,然後炸掉限制。對此一個答案是「改變你的組織或改變你的組織」,但對於那些做不到的人來說,Ruby 應該完全放棄他們嗎?
最後一段的最後一個字是答案的關鍵。Rails 是正確的,我認為,忽略企業世界,但這並不意味著 Ruby 也應該如此。像 Ruby 這樣的腳本語言的優點之一,是它們後現代的樂趣,可以深入混亂的軟體生態系統的泥沼中。Ruby 是其他框架填補 Rails 觀點留下的空白的絕佳場所。
我的同事 Badri 做了一個演講,很遺憾的是出席率不高,關於其中一個 - rBatis。rBatis 是流行的 Java 框架iBatis的 Ruby 移植(由另一位同事 Clinton Begin 領導)。這個移植是由第三位同事Jon Tirsén完成的。rBatis 仍然是一個正在進行中的工作,但它已經展示了讓 iBatis 流行起來的相同元素 - 無所畏懼地擁抱 SQL 的優點,而不是試圖將它隱藏在查詢物件的層級下。它還通過充分利用 Ruby 來增強其吸引力 - 從 Active Record(例如驗證)中竊取許多功能,並使用方便的 Ruby 語法,而不是 XML。(XML 是程式語言的駝背嗎?)rBatis 可能是解決複雜資料庫問題的答案,仍然適合 Rails 網路應用程式,但引入了不同的權衡。如果你對 SQL 感到自在,rBatis 看起來非常簡單。(順便一提,雪梨有任何 Rubyist 嗎?如果 rBatis 的工作進度變慢,我們可能需要你綁架 Jon 的衝浪板。)
所有這些都改變了我們的觀點。企業 Rails 很可能是個矛盾修飾法,但企業 Ruby 卻不然。的確,當我觀察企業世界的發展方式時 - 更廣泛地使用訊息、具有應用程式資料庫的自主服務、後現代地接受多樣性 - 不凝固的膠水似乎是理想的工具。
儘管有些人認為這些演講暗示大衛之間出現了裂痕,但進一步的對話讓我覺得任何裂痕都是基於誤解(現在有一個扭曲的隱喻)。PragDave 的呼籲並不是讓 Rails 支援這些事情,而是讓更廣泛的社群找到一個方法。同樣地,DHH 的回應是關於 Rails 核心團隊;這幾乎不會限制其他人的努力 - 正如 rBatis 所展示的那樣。此外,DHH 認為 PragDave 的大多數呼籲都與核心一致。一個狹窄的核心 Rails 和一個更廣泛的 Ruby 世界(包括 Rails)的概念支援了這兩個問題 - 這是組成小型工具的優點。
然而,這種寬紅寶石/窄軌道的世界觀有一個陷阱。我在主題演講中開玩笑說,RailsConf 是 Rails 失敗的徵兆,因為如果它真的成功,Rails 就會簡單到不需要舉辦會議。然而,其背後的事實是,Rails 已成為 Ruby 中 Web 應用程式(甚至是企業應用程式)的關鍵字。我猜測我們會在 RailsConf 中看到比 RubyConf 中更多企業人士,因為 Rails 已經引起注意。這會導致一個危險,人們會將 Rails 的固執本質聽成對 Ruby 的評論,從而給人留下 Ruby 不適合企業黏合劑的印象。這會很可惜。