書名: JRuby語言實戰技術作者名: (德)駱古道 王德志 姜偉本章字數: 2965字更新時間: 2018-12-29 19:21:20
1.2 為什么要學習JRuby語言
人們為什么對JRuby情有獨鐘?JRuby從本質上講就是用Java語言對Ruby語言解釋器所進行的再造,其目的是使JRuby兼具Java和Ruby二者的優秀特性,具有豐富的資源和簡潔明快的編程風格,更重要的是Ruby還緊密綁定了Ruby on Rails等Web應用開發框架。事實上,這正是軟件開發人員關注JRuby的基本出發點。
1.2.1 什么是Rails
什么是Rails?簡單地說,Rails就是指一個用Ruby實現的互聯網應用的框架,是一個典型的敏捷開發框架。
Rails是基于模型視圖控制模式(MVC)的網絡開發框架。Rails框架包含了這三個層次的每一部分,而且每一個層次都是該框架的組成部分。這就使得各層可以很好地融合在一起,而不需要我們考慮如何進行配置的問題。其中,模型(Model)主要負責業務邏輯操作和數據的存儲;視圖(View)主要負責把數據填加到HTML標記中;控制(Control)主要負責Web請求處理。
Rails框架主要有如下三大特點:
1.約定簡化了軟件開發
當前的許多Java語言的網絡軟件框架配置相當復雜。像Seam和Spring這些比較新的Java網絡框架,盡管其使用了極少的配置和代碼就可以發布業務對象,但是,當項目比較大的時候,其配置文件還是比較大的。這樣不利于系統的維護和管理。在Rails框架應用軟件中,配置文件不僅簡單和容易,而且框架還為軟件開發人員進行了細致地分類。
軟件工程領域中有兩條古老原則:避免冗余和有意義的默認值。在Rails框架中把這兩個原則體現為:“不要重復自己”和“約定優于配置”。Rails可以根據約定得出不同層次的連接關系,甚至可以顯式、動態地添加屬性,從而反射數據庫字段(如“last_name”)會自動使模型類的屬性(如“last_name”)出現。必須指出的是:這種默認配置(約定)并不是一成不變的,而是可以隨時進行改變的。其實Java語言框架也是有一些約定的,只是不夠徹底和靈活。
2.自動代碼生成器技術
Rails框架大量使用了Ruby的反射和元編程技術。正是元編程技術使開發人員能夠很容易獲取該框架的開發代碼,簡化了擴展軟件的開發過程,節省了軟件開發人員大量的時間。同時,也使得該框架的第三方代碼生成器迅猛發展,如Hobo框架和Goldberg框架。
3.快速的軟件開發過程
在企業中,任何Java語言應用系統進行修改以后,都需要經過配置、編譯、發布、重新設置、測試等一系列步驟才能投入使用。Rails框架軟件基本上也是如此。Rails開發Web應用能夠在很多方面做得更快、更方便,在不需要任何改動的情況下,就可以得到來自于開發、產品和測試數據庫的數據信息,從而節約了大量的開發、測試和配置時間。這種技術可以大大減少框架和應用軟件的代碼。Rails框架不僅自己包含了軟件測試的功能,如單元測試和集成測試,還容易集成第三方測試框架,如框架RSpec或者自動化驗收測試工具Selenium等。在網絡服務方面,Rails框架第一個提出使用REST架構服務,這樣可以大大方便Rails框架軟件與其他框架軟件的交互。我們將在第12章中詳細闡述這種全新的網絡服務技術。
Rails的成功促使軟件開發人員思考這樣的問題:Rails的發展代表了諸多語言的網絡框架的發展趨勢,它減少不必要的代碼,采用更多的抽象和動態機制,并且具備更全面的即開即用功能,那么網絡軟件框架如何發展?很多人其實已經有了這樣的共識,就是:敏捷開發在很多場合都非常適合,應該將Rails的思想引入其中。所以,Rails影響了當前網絡軟件框架的發展方向。到底應該如何做呢?計算機軟件專家Bruce Tate在文章http://www.51cto.com/art/200610/33167_1.html中就明確說:“不推薦用Java語言構建一個更好的Rails。相反,Java開發人員應該從Rails框架中學習一些教訓,并試圖構建或增強Java框架”。畢竟每一門語言都有自己的特性,模仿只能改進而不能夠創立一種全新的框架。
1.2.2 在JVM上運行Rails
JRuby是面向Ruby語言、基于Java虛擬機(JVM)的一種解釋程序,結合了Ruby語言的簡易性和JVM功能強大的執行機制,包括與Java庫的全面集成。Rails加快并簡化了Web應用的開發,盡管目前有人覺得它還不夠成熟,缺乏大型項目的成功案例,特別是在企業級應用方面,但是這種狀況正在逐步得到改善。
Java語言平臺及其虛擬機、庫和應用服務器的速度、穩定性和功能方面都一直在提升。Java是現在公認的開發高端應用的領先平臺。如果Java平臺不與Ruby這種新興語言聯系在一起,就有可能落后于流行趨勢。JRuby正是在這種大背景下產生的。這也是太陽(Sun)公司投入大量的人力物力支持JRuby語言項目的開發和NetBeans開發JRuby語言程序功能的重要原因。從更深一個層次分析,太陽公司正在使Java語言虛擬機平臺成為一個通用虛擬機平臺。
如果你現在正在使用Spring和Hibernate等Java框架,那你用不著改變。你可以借助于JRuby語言利用現有的Java語言項目資源,并通過選擇Rails框架開發你的下一個項目。遺憾的是,一般人都認為改用一種全新語言開發項目是危險的舉措,管理人員對風險有顧慮。Rails更容易被管理人員所接受。對于Java虛擬機而言,Rails框架應用軟件就變成了一個Java框架的應用軟件。
就像用C/C++編寫的操作系統能夠為應用程序(可能是使用抽象程序設計語言編寫的)提供基礎架構一樣,Java平臺也為Ruby等動態語言扮演“系統軟件”的角色,提供基礎架構層面的支持。如今可以通過Java訪問眾多的功能,例如,JDBC和Java消息服務(JMS)等API是同類中最佳的,而許多不可替代的內部系統或獨立軟件開發商的企業信息系統也可以通過Java API來訪問。Rails應用程序通過使用JRuby代碼,就可以像調用Java代碼那樣調用現有的Java庫。
有了JRuby,Rails應用程序可以與Java Web應用程序在現有的Java EE應用服務器上一起運行,這種應用服務器擁有強大的技術基礎架構。在人員和培訓方面,通常不缺乏教育計劃以及有經驗的開發和支持人員。另外只要運行在JVM上,這種應用服務器就能夠獲得最近十年在JVM方面投入的許多優化項目所帶來的好處。
至于軟件的安全問題,Java語言虛擬機的安全機制與Ruby語言運行環境相比更為安全,這樣在Java虛擬機上運行JRuby on Rails軟件也就變得更為安全和可靠了。
從軟件的運行層面上看,Ruby on Rails軟件是基于操作系統層面的,而JRuby on Rails軟件是基于Java虛擬機層面的,這是Rails框架的一個巨大飛躍,使Rails軟件進入到更高抽象運行層面,更好地實現跨平臺機制。
1.2.3 程序語言排行榜
我們來探究一下TIOBE Programming Community(www.tiobe.com)對目前流行的計算機程序設計語言的一個評估排行榜。請看排行榜圖1-2(這只是整個排名的一部分截圖):

圖1-2 排行榜截圖
該排名最新更新日期是2007年11月份,對比排名則是2006年11月份。從排行榜可以清楚看到:Ruby是排名大幅提前的語言之一,從2006年的第12位前移到第9位。根據官方的解釋:這里的“Ruby語言”實際上包含了Ruby、JRuby、XRuby、MetaRuby、Rubinius和YARV等不同的Ruby實現。
那么TIOBE Programming Community是如何來評估并確定這個排名的呢?按照官方的說法:是按照流行度(popularity)來排序,并且每個月更新一次。而流行度則是以全球范圍內熟練工程師、培訓課程,以及第三方銷售商的數量(availability)為基準的,以流行搜索引擎Google、Google Blogs、MSN、Yahoo和YouTube(選擇這些網站的理由來自Alexa.com——它能給出哪些搜索引擎是最常使用的)對該語言的點擊數為依據進行計算得出的。由此,TIOBE的排名榜不是對一門語言的好壞的排名,也不是以世界上有多少該語言的代碼量來排名的。但是TIOBE的排名可以為你回答這樣的問題:某個編程語言的熱門程度?你的編程技巧是否與時俱進了?你是否該考慮采用其他的編程語言?或者你正使用的語言是否可能最終消失?
看到JRuby和Ruby語言在這個排行榜上的位置和上升的速度,你認為我們是否需要認真對待JRuby和Ruby語言呢?有人對著這個排行榜這樣說:Ruby語言瘋狂了,你知道狂奔15個位置是什么概念嗎?Ruby語言已經開始悄悄地改變著這個世界。再看看Java語言(如圖1-3所示)和Ruby語言(如圖1-4所示)歷年來的變化情況,你會不會震驚?

圖1-3 Java趨勢變化圖(數據來源http://www.tiobe.com/)

圖1-4 Ruby趨勢變化圖(數據來源http://www.tiobe.com/)