rose 是由人人網
、糯公尺網
提供的、基於servlet規範、spring「規範」的開放源**web開發框架。
rose的開源位址是:
本文不打算為您詳細介紹rose,而且假設你已經對rose已經有一些了解,本文的中心是自己初次接觸rose後的一點感言。
一句話
基於spring的元件框架,推崇頁面驅動和約定優於配置。
rose中的controller是什麼?
你可以簡單的把它理解為mvc模式中的controller,但它的意義遠不止於此,rose中的controller可以說把頁面驅動和約定優於配置表現的淋漓盡致,它扮演接收處理web請求職責的物件類,接收web請求傳入的引數、排程服務處理業務、將處理結果設定到model中,返回乙個指示(頁面)。
乙個好的web開發框架是什麼?在我認為,那就是利於理解(mvc模式)和維護、快速響應開發需求、提高開發效率以及不俗的效能表現。
簡單來說,controller代表乙個用例中的角色,而它的action方法則代表角色的行為,它使開發人員把精力更加注重業務邏輯的實現。
那麼uri設計為(一種可能的方案):
修改資訊
user/$/update 登入
user /login 註冊
user /register
修改密碼
user /$/updatepsw
退出登入
user/logout
從上面我們可以一眼看出,這個controller接收這些請求都是圍繞著user這個角色,所以我們抽象出usercontroller這個物件,而它所產生的行為(uri)正好對應各個action方法。
另外,從命名規則上看,作者建議controller類採用名詞,action方法採用動詞,這的確是乙個不錯的實踐。
ok!我們只要再寫幾個頁面就可以簡單的把這個請求框架搭起來,接下來我們將大部分的精力就放在login、register等業務邏輯的實現,很顯然,這提高了我們的開發效率。
到這裡,你肯定要問,寫好了controller,rose是怎麼將實際的請求對映到action方法的呢,這之間肯定有乙個約定,這個約定就是請求的url和所在controller包路徑、controller類名稱、類自定義uri path註解、action方法,method註解以及註解中的uri匹配引數(具體的匹配規則這裡不再贅述)息息相關,這裡是rose的精華所在,也是體現約定的精華所在。
但在技術上,要找到特定action方法,肯定免不了使用反射來達到這一目的,但使用反射會不會對rose框架的效能有什麼大的影響呢?(作者說「我們有辦法通過在執行時自動進行**增強包裝成command而不使用類反射來實現目的」,不太明白這句話的含義,望高人指示!)。
實際上,在rose啟動時,rose會「瀏覽」controller類和其action方法以及兩者相關的註解,形成乙個rose匹配樹,這個匹配樹的形成意味著rose已經把所有uri對映規則以及盡可能做的事事先做好(包括對method方法名以及相關要素的快取),使rose在服務狀態時,不用再通過類反射來做和類、方法有關的識別和判斷,直接就可以從快取裡獲取method物件以及相關的其他要素進行處理。這是使用空間來交換時間的最佳例證,在服務狀態完全不使用反射也是不可能的,比如執行時訪問開發者自定義的action方法肯定要通過method.invoke方法呼叫(對於**物件的,使用proxy來呼叫),還有就是在提交表單時,如果action方法引數是乙個pojo,那麼就需要通過反射將表單裡的值動態設定到這個bean屬性中。
rose眼中的mvc模型
根據mvc的定義:
rose的controller可以理解為mvc中的c,jsp和velocity可以理解為view,那麼model呢?這部分通常是呼叫業務邏輯充血物件或者自己實現相應的service ,這也是開發人員最應該關注的地方。下圖是rose眼中的mvc,畫的比較簡陋:
其中的invocation物件應該引起你的注意,作者對invocation下的定義是:
「通常意義上的「invocation」是指一次呼叫,特別地是指對方法的一次呼叫,是對「一次呼叫」的抽象與封裝,比如包含了呼叫的輸入引數、被呼叫的物件與方法等等。
在rose框架下,最終的處理者應該是某個控制器方法,與之相關的還有引數解析器、驗證器以及知名度較高的***。為了封裝與一次請求處理相關的資料,我們設計了乙個invocation類來表示。」
rose和filter
rose的入口是net.paoding.rose.rosefilter,在它背後是乙個責任鏈,採用filter的好處是更加靈活,servlet的對映比較笨拙,一旦處理不了,servlet規範沒有提供機制使得可以由配置在web.xml的其他正常元件處理(除404,500等錯誤處理元件之外)。
採用filter的另乙個好處是,用作者的話來說,rose可以很好地和其他web框架相容。它能夠優先處理認定的事情,如無法處理再交給其它filter、servlet或jsp來處理,這在改造遺留系統、對各種uri的支援具有天然優越性。正是使用過濾器,rose不再要求請求位址具有特殊的字尾。
***先來乙個簡單的推理,某些uri需要做許可權設計,一般是在「特定的條件」下才能訪問這個uri,根據rose的uri對映規則,乙個uri對應乙個action方法,也就是說我們需要標識在「特定的條件」下才能訪問這個action方法。
為了更加準確模擬現實世界中這樣的約定,我們用註解來表示「特定的條件」,一般這樣的註解沒有值,只是個標籤,它的職責是「表明」,至於表明之後做什麼,由***來實現。
比如有些uri需要登入之後才能訪問,首先定義@loginrequired來表示「需要登入」,然後把它放在你認為需要登陸之後才能訪問的action方法上(放在類上表示其所有的方法都生效),接下來寫乙個***,用來實現在訪問標識「@loginrequired」的action方法之前,檢查使用者是否登入,如果登入則繼續執行,如果沒有登入則重定向到登陸頁面。
****************************************==我是分割線***********************************
開源的企業級的WEB開發框架
starplatform概述 starplatform是一款基於struts2 flex4 spring3 hiberate3技術架構的企業web應用開發平台,目標是針對所有的中小企業的web應用系統提供乙個統一的 可重用的基礎框架,降低企業的開發成本,維護成本,給開發人員提供乙個統一的程式設計模式...
Android 開源開發框架
更多參考 android 開源庫獲取途徑整理 第乙個 afinal 功能 volley是android平台上的網路通訊庫,能使網路通訊更快,更簡單,更健壯非同步載入網路 網路資料 優點 google官方推薦,請看去年的開發者大會介紹。缺點 功能比較少,只有網路資料載入和網路載入 第六個 第七個 第八...
web開發框架 soa開發框架 比較
dynamic data web site asp.net mvc wcsf web client software factory framwork版本 net 3.5 sp1 net3.5 sp1 net 2.0,最新.net 3.5 最新版本 1.0 preview 5 feb 28 2008...