新聞中心

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

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

——
作者: 時(shí)間:2008-01-09 來源: 收藏

 

         人員常常把  人員看作是沉悶而勞碌的老古董。我認(rèn)為 ruby 語言在復(fù)雜性方面會(huì)更易于調(diào)整,因?yàn)樗峁┝藢Ω呒壵Z言和特性(如開放類)的支持,以及具有更少配置需求和更簡單、集成化模型的  框架。 視圖框架是從頭構(gòu)建的,以便與 activerecord 集成(rails 持久性框架)。

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

        業(yè)務(wù)問題 

        關(guān)于本系列

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

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

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

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

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

        最后,我們了解到:發(fā)布初始站點(diǎn)只是一個(gè)開始。我們只實(shí)現(xiàn)了總體規(guī)劃的百分之三。因此我們所選的技術(shù)需要根據(jù)復(fù)雜性和負(fù)載作出一些調(diào)整。我認(rèn)為 ruby 語言在復(fù)雜性方面會(huì)更易于調(diào)整,因?yàn)樗峁┝藢Ω呒壵Z言和特性(如開放類)的支持,以及具有更少配置需求和更簡單、集成化編程模型的 rails 框架。 

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

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

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

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

         原理

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

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

       完全集成

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

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

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


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉