身為資深 .NET 開發者,我曾深耕 ASP.NET 控制項生命週期、精通 Presentation Model 與 MVP 等分層模式,長期認為 Rails 只是被過度吹捧的技術。但在投入一個月學習 Rails 後,我發現:掌握 Rails 讓我能以更少時間、更少代碼完成過去的專案。這不是要取代 .NET,而是擴展解決問題的工具箱。
Ruby 無編譯概念,一切在執行期發生。雖然失去編譯期型別檢查,但配合 TDD(測試驅動開發)、持續整合、單元測試(隔離資料庫與 Web Service)、依賴注入,同樣能產出高品質、可重構的代碼。編譯器的安全網不再是唯一選擇。
靜態語言需用 Decorator 或 Template Method 動態擴展行為;Ruby 內建支援:
class_eval、instance_eval:執行期動態定義方法這讓物件設計更簡潔,不需為擴展性預先建立複雜繼承體系。
無需型別宣告、介面定義,代碼更精簡。關鍵在於:小而緊湊的類別、短而精鍊的方法、完善的單元測試,除錯與追蹤反而更容易。動態語言倒逼你寫更好的 OO 設計。
Rails 內建 script.aculo.us,提供 Autocomplete、拖拉排序等豐富 Ajax 效果。在 Controller 撰寫伺服端邏輯,View 即可輕鬆套用,如同 ASP.NET 拖曳控制項般簡單,卻更輕量、可控。
遵循命名慣例(表名複數、Model 單數、主鍵 id、外鍵 model_id),Rails 自動完成 O/R Mapping。新增欄位只需:資料庫加欄位、View 加輸入框,零設定檔修改。這是 ActiveRecord 最大的生產力來源。
Rake 使用 Ruby 語法撰寫建構腳本,擅長字串處理、檔案目錄操作、進階正則表達式。需將 Server A 目錄下所有 .sql 檔複製到 Server B 並依序執行?Rake 幾行代碼搞定,告別批次檔與 XML 格式 NAnt 腳本的限制。
初期需克服「離開舒適區」的挫折感,但很快會體會到:同一問題有多種解法,擁有更多工具意味著更優秀的問題解決者。學習 Ruby/Rails 也反過來深化了我對設計模式、TDD、動態語言特性的理解。記住:學過的知識,要么應用,要么消逝。
.NET 依然強大,但技術忠誠會產生盲點。擁抱 Ruby on Rails,不是背叛 .NET,而是成為更全面的工程師。下次面對專案選型時,你會多一把鑰匙開啟更優雅的解法之門。