一個.NET程式員為什麼學習Ruby on Rails?

來源:互聯網
上載者:User
為什麼我——一名資深的.NET程式員,在經曆了一個月的Ruby on Rails學習後會認為:只有在我瞭解了Ruby on Rails之後,才能以較少的時間和編碼完成以前開發過的許多應用?

  你是一位資深的.NET程式員,而且已經用ASP.NET構建過許多Web應用。

  無數個不眠之夜,為了讓ASP.NET控制項生命週期中的事件驅動模型按你想要的方式執行,你費盡心血,深入細節。

  你精通於使用諸如Presentation Model、Model View Presenter這類設計模式對你的應用進行分層,以使其更易測試和維護。

  你認為Ruby on Rails只不過是眾多被吹噓的技術中的一員。在它還沒有獲得可觀的市場份額之前,你不會給予它過多的關注。

  歡迎來到我的世界。如果你還在讀這篇文章,我向你致敬。對於我下面的說法,你可能會充滿了好奇。為什麼我——一名資深的.NET程式員,在經曆了一個月的Ruby on Rails學習後會認為:只有在我瞭解了Ruby on Rails之後,才能以較少的時間和編碼完成以前開發過的許多應用?

  老實說,我仍然認為.NET很棒。它為我提供了一個平台,能讓我向客戶源源不斷地提供巨大的商業價值。但我時刻提醒自己:一個簡單的問題,有大量不同的方法和技術可以解決它,並且總有一些比其它更好。衷情於某種技術,必然會產生一些無意識的偏見,這最終會阻礙我為客戶供應商業價值的能力。例如,對像Ruby這樣的動態指令碼語言的瞭解,使我以為:與使用編譯型的語言相比,我可以花費更少的時間去編寫簡單的自動處理的Batch/Shell指令碼。

  為什麼不呢?

  下面這幾件事,是我(一個.NET程式員)學習Ruby時,發現的一些典型的不同。希望你能喜歡。

  不需要編譯Ruby中沒有編譯的概念。一切都在運行時發生作用。有人認為代碼編譯可以防止編碼時的粗心。那麼,你可能應該去看一下測試驅動開發是怎麼工作的,連續的代碼整合(當然了,不是每天都要構建),單元測試(不涉及資料庫和web服務的測試)和依賴注入可以協助你產生品質良好的代碼,使你能夠充滿自信的靈活的改變你的代碼。編譯的保障作用一下子變的不那麼重要了。

  動態增加類的行為——不使用Decorator模式在靜態類型語言中,要想動態增加類的行為,我們可以使用Decorator模式或者模板方法。而在Ruby中,有更多的方法可以在不複雜化對象設計結構的情況下,很簡單地做到這一點。這隻是因為語言本身對它的支援,例如:將模組作為minxin使用,使用class_eval, instance_eval方法等。事實上,甚至可以通過編程方式在運行時定義類的方法。在靜態類型語言中,也可以通過代碼產生來完成它。但瞭解更多的方法,可以讓你向一個優秀的問題解決者邁進一步。

  (譯者註:mixin在物件導向程式設計語言中是一種提供某些功能給子類繼承的類,但mixin並不能執行個體化。從某個mixin繼承並不是什麼特殊的形式,而它更適於收集功能。某個子類甚至可以通過繼承一個或者多個mixin選擇繼承它的全部或者多數功能。一個mixin能延期到運行時定義和Binder 方法,而屬性和執行個體參數也可在編譯時間才被定義。這不同於我們常見的方式,比如先定義所有的屬性、方法,並在編譯時間進行初始化等。)

  通過去除所有的型別宣告和介面聲明,將程式碼程式庫“瘦身”10-20% Ruby是一門動態類型語言。你不需要在使用變數之前聲明它的類型,或者為方法簽名中的參數定義合適的類型。這意味著你的代碼會變得更“瘦”,但這是以代碼難於調試和難於進行錯誤跟蹤為代價的,對嗎?並非如此,如果你相信單元測試和良好的物件導向設計的概念。如果你的類小而緊湊,類的方法短而精良,並且經過了很好的單元測試,那麼調試和錯誤跟蹤將會很簡單。

  及時Ajax化Ruby on Rails內建對script.aculo.us庫的支援(script.aculo.us是一個Ajax類庫,裡麵包含了大量炫目的Ajax效果,使用這些效果,可以讓你的應用更具有互動友好性)。在許多情況下,這相當於在ASP.NET中將一個控制項標籤拖到html頁面上,然後在別的地方(在Rails中,這個地方是控制器)為其編寫方法以處理Ajax在伺服器端的Web請求。你的Web頁面支援Ajax功能,就像Google Suggest的autocomplete或者拖拉排序那樣。就這麼簡單。

  使用Rails,不需要專門的O/R映射使用命名慣例對資料庫的表和列以及你的領域模型對象命名,可以讓你忘記親自進行O/R映射的痛苦。Ruby on Rails會為你實現這一切。在最簡單的情況下,在視圖上增加一個欄位並對它進行持久化,你只需要在html中增加一個文字框並在相應的資料庫表中增加一個新列,然後你就可以看到,新輸入的文字被儲存在了資料庫建立的列中。真的,就這麼簡單。

  用Ruby指令碼構建、部署或發布應用,比使用NAnt更好。Rake是Ruby on Rails開發中使用的標準構建工具。Rake使用Ruby文法,這意味著在構建和部署不同的應用時,你需要使用Ruby去編寫你的構建指令碼。作為一門語言,Ruby在以下幾個方面尤為出色:處理字串,檔案和目錄的建立,進階的Regex支援。想一下,有多少次,你需要在批處理和NAnt指令碼中執行以下的操作:把伺服器A上a目錄下所有以.sql為副檔名的檔案拷貝到伺服器B,然後依次執行這些檔案。如果你討厭批處理指令碼在編程方面的限制,或者不喜歡以NAnt中那樣的xml格式去編寫指令碼,你會喜歡Rake的。

  不勞無獲學習Ruby的時候,我必須克服許多障礙。首先,我不得不接受這樣的事實:與正在使用的“舒適”的技術相比,尋找Ruby的解決方案,要花去我更多的時間。但是,用不了多久,你就會感到喜悅,因為你可以用大量的方式解決不同的問題。其次,學習Ruby/Rails讓我受益非淺,通過學以致用,加深了對知識的理解。記住,對於你曾耗費時間學過的東西,要麼使用它,要麼任其消逝。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.