新聞中心

EEPW首頁 > 電源與新能源 > 學習方法與實踐 > rails開發(fā)與java 編程的比較

rails開發(fā)與java 編程的比較

——
作者: 時間:2008-01-09 來源: 收藏

 

         人員常常把  人員看作是沉悶而勞碌的老古董。我認為 ruby 語言在復雜性方面會更易于調整,因為它提供了對更高級語言和特性(如開放類)的支持,以及具有更少配置需求和更簡單、集成化模型的  框架。 視圖框架是從頭構建的,以便與 activerecord 集成(rails 持久性框架)。

        rails 人員常常把  開發(fā)人員看作是沉悶而勞碌的老古董。而  崇拜者則常常認為 ruby on rails 只是一個玩具,根本不能用于任何嚴肅的軟件開發(fā)。作為一名對這兩種技術都有著廣泛使用經驗的顧問,我認為真實的情形介于這兩種觀點之間。由于跨越邊界 系列文章即將結束,因此我打算對它們再作一次比較。本文并非考察某種特殊的技術或語言,而是主要介紹我當前正在從事的項目,并將它與我以前從事的 java 項目進行比較。另外,我建議您閱讀“跨越邊界”系列的前幾期文章,對相關主題作更深入的了解。這種直接的說明可讓您在二者之間權衡利弊,并可能使您在數據庫 web 應用程序 green-field 的開發(fā)中通過使用 rails 獲益。

        業(yè)務問題 

        關于本系列

        在跨越邊界 系列文章中,作者 bruce tate 提出這樣一種觀點,當今的 java 程序員們可以通過學習其他方法和語言更好地武裝自己。自從 java 技術明顯成為所有開發(fā)項目最好的選擇以來,前景已經發(fā)生了改變。其他框架影響著 java 框架的構建方式,從其他語言學到的概念也可以影響 java 。您編寫的 python(或 ruby、smalltalk 等語言)代碼可以改變編寫 java 代碼的方式。 本系列介紹與 java 開發(fā)完全不同的編程概念和技術,但是這些概念和技術也可以直接應用于 java 開發(fā)。在某些情況下,需要集成這些技術來利用它們。在其他情況下,可以直接應用概念。具體的工具并不重要,重要的是其他語言和框架可以影響 java 社區(qū)中的開發(fā)人員、框架,甚至是基本方式。 

       不論是 ruby on rails 框架還是任何 java 框架都不能解決所有問題。為了提高成功的幾率,需要長期、細致地考察業(yè)務問題,理解周圍的各種假定情況,以及了解您的團隊。只有這樣才能選出正確的語言來進行開發(fā)。

        去年,arvato systems 聘請我?guī)ьI團隊構建 changingthepresent.org,它是一種新平臺,用于將非贏利性團體和捐贈人組織在一起。與很多 internet 公司一樣,我們向客戶展示了可購買的實際產品。與其他公司不同的是,這些 “產品” 指的是提供機會,比如:一名癌癥研究員一小時服務收費 50 美元、幫助盲人收費 30 美元,或者保護一英畝雨林一個月收費 20 美元。我們面臨兩大挑戰(zhàn):一份很緊湊的時間表和長期的復雜性。

        開發(fā)工作從九月份開始,要求必須在十一月份之前建立起一個站點,以便有機會趕上圣誕節(jié)期間的通信量高峰。(最終我們超出了十一月份這個期限兩星期。)在其他開發(fā)語言中,基于 java 的解決方案可能要花費 6 到 18 個月才能完成這一任務。因此生產力是一個很重要的考慮因素,這與 java 部署思想相悖。 

        通過對競爭對手和項目的考察,我們了解到:我們希望能夠每天給站點帶來幾百萬次點擊的通信量。而我們需要每天有幾十萬次成功的點擊,因此可伸縮性也是一個考慮因素。這與 java 部署思想相符。 

        最后,我們了解到:發(fā)布初始站點只是一個開始。我們只實現了總體規(guī)劃的百分之三。因此我們所選的技術需要根據復雜性和負載作出一些調整。我認為 ruby 語言在復雜性方面會更易于調整,因為它提供了對更高級語言和特性(如開放類)的支持,以及具有更少配置需求和更簡單、集成化編程模型的 rails 框架。 

        雖然我們面臨著時間和可伸縮性方面的挑戰(zhàn),但是也擁有一些其他的有利因素。我們擁有一張完全空白的候選名單:可以選擇想要的任何技術、任何團隊??梢远x項目、培訓和全部的技術。我們可完全自由地作出選擇。

        java 語言是一種優(yōu)秀的通用語言。它總是應用于新的技術領域,如系統和移動設備。java 語言在廣泛關注的集成方面也表現優(yōu)秀。它具有高性能、流行并受到平臺的良好支持。但是正如您在本系列中所了解到的那樣,java 語言并不是用于數據庫支持的 web 應用程序的 green-field 開發(fā)的最佳選擇。

        相比之下,ruby on rails 框架則是新的。并沒有很多人使用 rails 開發(fā)高通信流量的站點,并且?guī)缀醪淮嬖谑裁词褂?nbsp;rails 多年開發(fā)項目的經驗。但它仍然是一種高生產力的數據庫支持的 web 應用程序開發(fā)的框架。最后,盡管我們對 rails 缺乏開發(fā)長期項目的經驗和并未得到廣泛部署有所顧慮,但那份緊湊的時間表驅使我們選擇了 ruby on rails。 

        作出這個決定之后,我們發(fā)現招募項目人才非常容易。我們還發(fā)現早期的生產力優(yōu)勢非常顯著 —— 甚至比預期的還要好。我們確實遇到了一些早期的穩(wěn)定性問題,因此加強了測試工作的力度。此后穩(wěn)定性得到了極大的改進。

         原理

        每個框架設計者都使用一組假定來構造該框架的重寫原理。學習遵守該原理的約束可使您愉快地進行編程,而挑戰(zhàn)這些約束則會使您的編程受挫。rails 框架和 java 框架擁有很多不同的原理。 

        rails 是一種集成框架,需要使用高度利用 ruby 語言的動態(tài)本質。rails 開發(fā)人員強調框架的生產力特性而不是工具特性,并且常常將 web 架構看得非常簡單,在本系列的前幾篇文章中您已了解到這一點。java 設計者通常必須分塊地組合開發(fā)環(huán)境,獨立地選擇持久性、web 和集成層。他們通常嚴重地依賴工具來簡化核心任務。web 架構設計趨向于較為復雜。 

       完全集成

        java 框架往往是解決一個小問題(比如持久性或查看組織),而 rails 則是一個集成環(huán)境。rails 開發(fā)人員的優(yōu)勢在于不必解決與許多不同框架集成的問題。大多數 hibernate 開發(fā)人員陷入了過早關閉與 java web 框架之間的連接的陷阱。rails 視圖框架是從頭構建的,以便與 activerecord 集成(rails 持久性框架)。當您考察用于 web 服務、配置和插件的 rails 框架時也會發(fā)現類似的經驗。java 編程支持各種不同的框架,對于所有這些框架使用不同的集成策略。 

        java 開發(fā)人員的優(yōu)勢在于選擇。如果您需要從頭構建一個框架,則可能要考慮使用基于 sql 的解決方案用于數據庫集成(如 ibatis 或 java 編程中基于 jdbc 的包裝框架之一)。反過來,如果要使用一種古老的模式進行編程,則可能要使用對象關系映射框架(如 hibernate)。相比之下,如果您使用 rails,則擁有一個主要選擇:activerecord。這意味著 java 框架提供了更多的選擇,有時能提供更好的集成開發(fā)項目的解決方案。但是由于我們要開發(fā)一個 green-field 項目,因此選擇算不上是一個問題。 

linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


評論


相關推薦

技術專區(qū)

關閉