天天看點

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 程式測試就象普通程式測試一樣簡單。 Rails 的 ORM 做的相當的好用,雖然比 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 )功能相當強大,你可以重載 ActiveRecord 的 validate 方法,也可以使用效驗的輔助方法( validates_format_of , validate_uniqueness_of,validate_acceptance_of, validates_length_of 等),使用起來非常友善。同時 ActiveRecord 還提供了回調方法 ( before_destory,before_save,after_destory,after_save 等)和 Observer ,不需要 java使 用 Filter 和 AOP 的複雜配置,便可以獲得其強大的功能。   ActionController 作為控制器,其功能就是根據請求調用 Action, 在 Action 中執行業務方法,并轉向适當的視圖。 ActionController 提供了一種稱為請求路由( Routing Requests )的方法來比對 URL 請求 , 進而找到正确的 Controller 和 action ,類似 j2ee 使用 xml 配置,但請求路由它隻需要提供一套(或自己定制)路由比對政策就可以處理所有的請求,比 j2ee 針對每一個 Action 請求 需要一個 mapping 簡潔的多,同時也不失其強大的功能。 ActionController 也有類似于 jsp 的 render( 類似 jsp 的 forward) 和 redirect_to ( 類似于jsp的redirect ), 同時提供了 Cookie 和 Session ,其使用非常友善。 并且使用了 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 提供了兩種模闆 rxml 和 rhtml 模版,由于 ruby 語言的動态性,使得 ruby 語言嵌入 rhtml 中來控制頁面邏輯以及輸出具有原生的優勢,不用像 jsp 需要提供表達式語言( EL )。使用 Helper 方法可以避免在模版視圖中嵌入大量的代碼(特别是業務代碼),進而實作代碼和表現的分離。 ActiveView 提供了大量的輔助方法來提供連接配接,生成表單,同時提供了分頁的功能。 ActiveView 使用布局模版、局部頁面模版,以及元件,使得大量的頁面和局部頁面可以被共享和重用,其 J2EE 架構至今還尚未有以實作易于重用模版的和先進的理念(特别是渲染技術, Structs 的 Title ,JSF 的渲染還不錯 , 但與之相比還相差甚遠),局部模版技術與 rails 實作的 Ajax 技術搭配起來可以實作很酷的頁面動态效果,同時對局部模版可以進行緩存來改善 web 性能。模版可以 友善 的通路 Controller 的執行個體變量和類變量,以及輔助方法,這一切都是 Controller 與頁面模版之間的互動非常容易,同時頁面之間可以傳遞參數也大大地增加頁面之間的互動性。 同時 Rails 提供的對 Ajax 完好的內建, rails 對 ajax 的封裝使你隻需要使用 ruby 代碼就可以産生 web2.0 的很酷的效果,避免 使用 javascript 這個難以調試的東東,同時也避免了不少低級的操作, rails 在背後替你做了一切。 最後值得一提的是 rails1.2 提供的 Migration ,對控制軟體版本,靈活開發,資料庫模型的演變等提供了非常友善的支援。

ror