ROR

接觸到ROR還是因爲工作中用到了一款非常不錯的系統redmine,一時興起查閱了一些相關文檔,對ROR這個開源框架感覺還好!

Ruby on Rails的兩大箴言:約定優於配置(Convetion over configuration)和DRY(Don’t repeated yourself)造就了Rails 的極高的開發效率,使Rails框架迅速風靡世界,現在可以說是紅的發紫。
  Ruby on Rails框架,是一個使web應用的開發、部署和維護變得更容易的框架,Rails框架非常適合進行敏捷開發和基於測試驅動開發,因爲整個框架的設計,就將測試放在了很高的位置,你每生成一個Mode , Contorller他都會自動在test文件夾下生成對應的測試類,並且Rails提供了一整套類似於JUnit的單元測試工具,同時提供了對web測試的功能(甚至可以深入到Html的標籤進行測試),它提供的測試設施非常全面和易用,它可以讓對數據庫操作部分的各個測試用例彼此隔離,提供Mock對象(request , response,使得web程序測試就象普通程序測試一樣簡單。
RailsORM做的相當的好用,雖然比hiberate的功能要弱一些,但使用Ruby語言的動態性動態的生成查詢函數的功能用起來比起Hibernate爽多了,讓你真正的脫離了對sql的低級操作(hibernate引入HQL,宣稱具有面向對象的查詢語句,感覺有自欺欺人的感覺,我感覺存在的理由只是作爲一箇中介,方便根據不同的sql方言生成sql而已),而同時你也擁有直接操作sql的強大功能來實用複雜的場合,例如多表連接,只查詢部分字段等。它讓Mode繼承Active::Record ,使得的領域模型是脹血型的,更加面向對象,適合領域驅動的設計方法建模(使用Hibernate j2ee,一般是貧血型的,只有屬性,沒有行爲,有違面向對象的理念。實現充血型的模型相當困難,例如使用AOP什麼的)。Rails只需要使用has_many,belong_to,has_one,has_and_belongs_to_many類似聲明的方法
可以輕鬆指定表間關聯。同時提供了Acts As List ,Acts As Tree, 以及單表繼承等高級功能。值得一提的是Rails的屬性是虛的
直接綁定於表中的屬性,這樣當你修改數據庫設計(如增加字段),同時會反映到Mode中。ActiveRecord的功能不止於此,
供的效驗(validation)功能相當強大,你可以重載ActiveRecordvalidate方法,也可以使用效驗的輔助方法(validates_format_of
,validate_uniqueness_of,validate_acceptance_of, validates_length_of等),使用起來非常方便。同時ActiveRecord還提供了回調方法before_destory,before_save,after_destory,after_save等)和Observer,不需要java使FilterAOP的複雜配置,便可以獲得其強大的功能。
  ActionController作爲控制器,其功能就是根據請求調用Action,Action中執行業務方法,並轉向適當的視圖。ActionController
提供了一種稱爲請求路由(Routing Requests)的方法來匹配URL請求,從而找到正確的Controlleraction,類似j2ee使用xml配置,但請求路由它只需要提供一套(或自己定製)路由匹配策略就可以處理所有的請求,比j2ee針對每一個Action請求需要一個mapping
簡潔的多,同時也不失其強大的功能。ActionController也有類似於jsprender(類似jspforward)redirect_to(類似於jsp的redirect),
同時提供了CookieSession,其使用非常方便。並且使用了flash方便的在一個或多個請求中傳遞信息。
ActionController提供了過濾器(Filters)和效驗(verification)。Filter提供了類似Spring框架AOP同樣強大的功能(前置/後置/環繞 過濾器),你可以動態的增強一個方法,使用Filter我們可以輕鬆實現身份認證,日誌等具有一個橫切面性質的業務功能。
Rails提供了頁面緩存,action緩存,片段緩存,大大減少了重複操作導致的服務器資源和時間的耗費,提高了性能。同時提供了緩存實效策略和清掃器以及基於時間的緩存實效策略,避免了手工管理緩存的困難。同時Rails還不甘ActionController現有的功能和
機制Rails1.2提供了REST(Representions State Tranfer), REST技術,使得只需要指名控制器和相應的資源,而不需要指名Action
可以進行相應的操作。REST是基於htpp協議的一些動詞GET,POST,DELETE,PUT來執行相應的操作的,它使得URLs簡潔清晰,可以根據不同的請求給予不同的響應(響應可以是.html,.xml,.js等),代碼相對更少,使用一個面向CRUD的控制器以及清晰的應用設計。他在controller中使用response_to, 連接和表單使用新的help method以及在routes.rb裏生成新的路由等新的特色。
ActiveView提供了兩種模板rxmlrhtml模版,由於ruby語言的動態性,使得ruby語言嵌入rhtml中來控制頁面邏輯以及輸出具有原生的優勢,不用像jsp需要提供表達式語言(EL)。使用Helper方法可以避免在模版視圖中嵌入大量的代碼(特別是業務代碼),從而實現代碼和表現的分離。ActiveView提供了大量的輔助方法來提供連接,生成表單,同時提供了分頁的功能。ActiveView使用佈局模版、局部頁面模版,以及組件,使得大量的頁面和局部頁面可以被共享和重用,其J2EE框架至今還尚未有以實現易於重用模版的和先進的理念(特別是渲染技術,StructsTitle ,JSF的渲染還不錯,但與之相比還相差甚遠),局部模版技術與rails實現的Ajax技術搭配起來可以實現很酷的頁面動態效果,同時對局部模版可以進行緩存來改善web性能。模版可以方便的訪問Controller的實例變量和類變量,以及輔助方法,這一切都是Controller與頁面模版之間的交互非常容易,同時頁面之間可以傳遞參數也大大地增加頁面之間的交互性。同時Rails提供的對Ajax完好的集成,railsajax的封裝使你只需要使用ruby代碼就可以產生web2.0的很酷的效果,避免
使用javascript這個難以調試的東東,同時也避免了不少低級的操作,rails在背後替你做了一切。
最後值得一提的是rails1.2提供的Migration,對控制軟件版本,敏捷開發,數據庫模型的演變等提供了非常方便的支持。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章