Rails框架從誕生的第一天開(kāi)始就受到了B/S應(yīng)用開(kāi)發(fā)領(lǐng)域的廣泛關(guān)注,經(jīng)過(guò)大約幾年發(fā)展,Rails框架已經(jīng)逐漸成熟穩(wěn)定起來(lái),國(guó)外已有相當(dāng)多的公司開(kāi)始選擇從JavaEE平臺(tái)過(guò)渡到Rails開(kāi)發(fā)平臺(tái)。畢竟,Rails平臺(tái)提出了一個(gè)非常具有誘惑力的口號(hào):開(kāi)發(fā)效率是JavaEE開(kāi)發(fā)平臺(tái)的10倍。
的確,Rails具有很好的開(kāi)發(fā)效率,而且很難出錯(cuò):在JavaEE開(kāi)發(fā)領(lǐng)域,你需要掌握很多框架,詳細(xì)了解每個(gè)框架的各種特性,你才可以組合出一套適合自己的開(kāi)發(fā)平臺(tái)。但在Rails領(lǐng)域,你無(wú)需選擇,你只要按Rails平臺(tái)的約定開(kāi)發(fā),一切都會(huì)非常合理,非常優(yōu)雅。
Rails平臺(tái)不僅提供了整套的MVC解決方案,并且提供了豐富的代碼生成器。Rails甚至不完全是一個(gè)框架,更像一個(gè)企業(yè)開(kāi)發(fā)平臺(tái),它搭建了整個(gè)應(yīng)用開(kāi)發(fā)的骨架,并提供了大量的代碼生成器來(lái)輔助開(kāi)發(fā),開(kāi)發(fā)者只需在系統(tǒng)生成的代碼骨架上進(jìn)行適當(dāng)修改、定制即可完成應(yīng)用的開(kāi)發(fā)。選擇使用Rails作為開(kāi)發(fā)平臺(tái),仿佛上了鐵軌的火車(chē)一樣,火車(chē)只管向前運(yùn)行,鐵軌將負(fù)責(zé)把火車(chē)帶到最終目的地(Rails就是鐵軌的意思)。
Rails框架對(duì)迭代式的增量開(kāi)發(fā)有很好地支持,即使系統(tǒng)的數(shù)據(jù)庫(kù)需要重新設(shè)計(jì)、需要增加系統(tǒng)實(shí)體,Rails一樣能夠輕松面對(duì)迭代式的增量開(kāi)發(fā)正是敏捷開(kāi)發(fā)的核心之一,這也是Rails框架被稱(chēng)為敏捷開(kāi)發(fā)框架的原因。不僅如此,由于客觀世界的復(fù)雜性,需求的變更常常是許多開(kāi)發(fā)者最頭疼的事情。使用了Rails開(kāi)發(fā)平臺(tái)后一切都改變了:Rails替你做好了擁抱改變的準(zhǔn)備,它的靈動(dòng)性令人嘖嘖稱(chēng)奇。
自2007年Apple的Leopard上捆綁了Ruby on Rails出售以來(lái),Rails 社區(qū)也已不斷壯大。全球有眾多的 Rails 開(kāi)發(fā)人員充滿(mǎn)活力、團(tuán)結(jié)互助,并且渴望不斷地改進(jìn)該軟件??梢院敛豢鋸埖卣f(shuō),Rails 的改進(jìn)應(yīng)歸功于社區(qū),因?yàn)槭浅绦騿T之間不斷的相互超越使得構(gòu)建出的軟件越來(lái)越完善。如此不斷地循環(huán),各個(gè)功能才得以從初期階段快速發(fā)展,逐漸變的實(shí)用、功能不斷強(qiáng)大并完善,最終成為不可或缺的工具。在很多情況下,社區(qū)認(rèn)為最基本的 gems 和 plug-ins 都會(huì)保留到 Rails 核心中。Rails 的 named scopes(一個(gè)查詢(xún)快捷方式),可實(shí)現(xiàn)與 nested forms 相同的功能。這是一個(gè)新增的功能,可取代以前的嘗試,并在相同的 HTML 表單中創(chuàng)建和編輯多個(gè)模型。實(shí)際上,對(duì)于 Rails 開(kāi)發(fā)人員來(lái)說(shuō)最困難的任務(wù)或許就是跟上變化的節(jié)奏。(幸運(yùn)的是,目前有一些 Ruby 和 Ruby on Rails 的每周播客,這些播客會(huì)組織并呈現(xiàn)最新趨勢(shì)以及分享最佳實(shí)踐。)
全棧式的MVC框架
Rails是一個(gè)全棧式的MVC框架,換句話(huà)說(shuō),通過(guò)Rails可以實(shí)現(xiàn)MVC模式中的各個(gè)層次,并使它們無(wú)縫地協(xié)同運(yùn)轉(zhuǎn)起來(lái)。
在實(shí)際開(kāi)發(fā)一個(gè)MVC模式的Web應(yīng)用項(xiàng)目時(shí),如果使用Java開(kāi)發(fā),需要用到Struts(View 層)、Hibernate(Model層)和Struts(Controller 層)spring 整合mvc 3個(gè)框架,而且需要額外整合3個(gè)框架開(kāi)發(fā)出的內(nèi)容。而使用Ruby語(yǔ)言開(kāi)發(fā)相同的項(xiàng)目時(shí),只需要用到Rails框架就可以完成。
約定優(yōu)于配置
為了說(shuō)明各個(gè)對(duì)象之間的關(guān)聯(lián)關(guān)系,一般的Web應(yīng)用開(kāi)發(fā)框架往往采用寫(xiě)入XML配置文件的方法。這種方式雖然可以解決一些問(wèn)題,但是卻帶來(lái)了管理上的混亂。
Rails 對(duì)此的態(tài)度是約定優(yōu)于配置,這意味著在Rails中不會(huì)出現(xiàn)XML配置文件。Rails使用Web應(yīng)用多年來(lái)積累的各種常見(jiàn)約定(更具體地說(shuō)是命名規(guī)則)來(lái)代替XML配置文件,而在Rails內(nèi)部的映射與發(fā)現(xiàn)機(jī)制根據(jù)這些約定可以實(shí)現(xiàn)對(duì)象之間的關(guān)聯(lián)。在第1章中,通過(guò)Rails的映射與發(fā)現(xiàn)機(jī)制實(shí)現(xiàn)了數(shù)據(jù)表與Ruby對(duì)象之間的關(guān)聯(lián)。
更少的代碼
使用約定來(lái)代替XML配置文件說(shuō)明Rails本身完成了大量的底層工作,這意味著使用更少的代碼來(lái)實(shí)現(xiàn)應(yīng)用程序是極有可能的。此外,代碼量的縮減也減小了出現(xiàn)bug的可能性,降低了維護(hù)程序和升級(jí)程序的難度。
生成器
Rails 使用的實(shí)時(shí)映射技術(shù)和元編程技術(shù),免去了開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中編寫(xiě)大量樣板文件代碼的煩惱。在少數(shù)需要使用樣板文件代碼的時(shí)候,開(kāi)發(fā)人員可以通過(guò) Rails內(nèi)建的生成器腳本實(shí)時(shí)創(chuàng)建,而不再是通過(guò)手工編寫(xiě)。Rails的這個(gè)特點(diǎn)可以使開(kāi)發(fā)人員更專(zhuān)注于系統(tǒng)的邏輯結(jié)構(gòu),而不必為一些瑣碎的細(xì)節(jié)所煩擾。
零周轉(zhuǎn)時(shí)間
對(duì)已有的Web應(yīng)用系統(tǒng)進(jìn)行修改后,其一般需要經(jīng)過(guò)配置、編譯、發(fā)布、重新設(shè)置、測(cè)試等一系列步驟才能投入使用,這明顯浪費(fèi)了許多時(shí)間。而使用Rails開(kāi)發(fā)Web應(yīng)用系統(tǒng),可以通過(guò)瀏覽器即時(shí)查看程序運(yùn)行結(jié)果,從而節(jié)約了大量的時(shí)間。
支架系統(tǒng)
Rails的支架系統(tǒng)可以自動(dòng)為任何相關(guān)的數(shù)據(jù)庫(kù)表創(chuàng)建一套包含標(biāo)準(zhǔn)CRUD操作和前臺(tái)視圖的系統(tǒng)。通過(guò)支架系統(tǒng),開(kāi)發(fā)人員可以方便快捷地操縱數(shù)據(jù)庫(kù)中的數(shù)據(jù)表。此外,Rails也允許開(kāi)發(fā)人員使用自己設(shè)計(jì)的代碼或視圖來(lái)替換自動(dòng)生成的代碼和視圖。
指導(dǎo)原則
Rails的指導(dǎo)原則是"不要重復(fù)你自己"(Don't Repeat Yourself, 或DRY).意思是說(shuō)你寫(xiě)的代碼不會(huì)有重復(fù)的地方.比如以往數(shù)據(jù)庫(kù)的接口往往是類(lèi)似的程序代碼但是在很多地方都要重復(fù)用到.這無(wú)論是給編寫(xiě)還是維護(hù)都造成了很大的代價(jià).相反,Rails給你提供了絕大多數(shù)的支持,讓你只需要短短的幾行代碼就可以實(shí)現(xiàn)強(qiáng)大的功能.而且,Rails提供了代碼生成工具,讓你甚至不需要編寫(xiě)一行代碼就實(shí)現(xiàn)強(qiáng)大的管理程序.Rails通過(guò)reflection和runtime extension減少了對(duì)configuration文件的依靠,這和Java,C#語(yǔ)言的方向有很大不同,讓你減少了很多配置和部署的麻煩,但是性能上卻完全可以應(yīng)付一般網(wǎng)站的需求。
更多建議: