<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Thinking in sky

    --老賀的BLOG

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      21 隨筆 :: 0 文章 :: 35 評論 :: 0 Trackbacks
        Struts與Webwork的扇子請?zhí)^本篇。

        MVC不就是把M、V、C分開么?至唯物樸素的做法是兩個JSP一個負責(zé)View,一個負責(zé)Controller,再加一個負責(zé)Model的Java Bean,已經(jīng)可以工作得很好,那時候一切都很簡單。
        而現(xiàn)在為了一些不是本質(zhì)的功能,冒出這么多非標(biāo)準(zhǔn)的Web框架,實在讓人一陣郁悶。像Ruby On Rails那樣簡捷開發(fā),可用可不用,而且沒有太多的限制需要學(xué)習(xí)的,比如Webwork這型還可以考慮。但像Struts那樣越用框架越麻煩,或者像Tapestry那樣有嚴重自閉傾向,額上鑿著"高手專用玩具"的,用在團隊里就是不負責(zé)任的行為了。

        so,我的MVC方案是使用Spring MVC的Controller接口,寫最普通的JavaBean作為Controller,本質(zhì)就和當(dāng)年拿JSP作Controller差不多,但擁有了Spring IOC的特性。
        之所以用這么消極的選擇標(biāo)準(zhǔn),是因為覺得這一代MVC框架離重回RAD時代的標(biāo)準(zhǔn)還很遠,注定了只是一段短暫的,過渡的技術(shù),不值得投資太多精力和團隊學(xué)習(xí)成本。

    1. 原理
        Spring MVC按植物分類學(xué)屬于Martin Flower〈企業(yè)應(yīng)用模式〉里的靜態(tài)配置型Front Controler,使用DispatchServlet截獲所有*.do的請求,按照xml文件的配置,調(diào)用對應(yīng)的Command對象的 handleRequest(request,response)函數(shù),同時進行依賴對象的注入。
        我們的Controller層,就是實現(xiàn)handleRequest(request,response)函數(shù)的普通JavaBean。

    2. 優(yōu)勢
       
    Spring MVC與struts相比的優(yōu)勢:
        一是它的Controller有著從松到緊的類層次結(jié)構(gòu),用戶可以選擇實現(xiàn)只有一個HandleRequest()函數(shù)的接口,也可以使用它有很多回調(diào)函數(shù)的SimpleFormController類。
        二是不需要Form Bean,也不需要Tapestry那所謂面向?qū)ο蟮捻撁鎸ο螅瑢τ谏钆骂惻蛎洠囊粋€東西要動N個地方的人最適合不過。
        三是不需要強XML配置文件,宣告式編程是好的,但如果強制成框架,什么都要在xml里面宣告,寫的時候繁瑣,看的時候也要代碼配置兩邊看才能明白就比較麻煩了。

        那Webwork呢?沒有實戰(zhàn)過,不過因為對MVC框架所求就不多,單用Spring MVC的Controller已經(jīng)可以滿足需求,就不多搞一套Webwork來給團隊設(shè)坎,還有給日后維護,spring,ww2之間的版本升級添麻煩了。真有什么需要添加的,Spring MVC源代碼量很少,很容易掌控和擴展。

    3.化簡
    3.1. 直接implement Controller,實現(xiàn)handleRequest()函數(shù)
        首先,simple form controller非我所好,一點都不simple。所以有時我會直接implement Controller接口。這個接口的唯一函數(shù)是供Front Controller調(diào)用的handleRequest(request,response)。
        如果需要application對象,比如想用application.getRealPath()時,就要extends webApplicationObjectSupport。

    3.2.每個Controler負責(zé)一組相關(guān)的action
        我是堅決支持一個Controler負責(zé)多個action的,一個Controler一個action就像一個function一個類一樣無聊。所以我用最傳統(tǒng)的方式,用URL參數(shù)如msg="insert"把一組相關(guān)action交給一個Controler控制。ROR與制作中的Groovy On Rails都是這種模式,Spring也有MultiActionController支持。
        以上三者都是把URL參數(shù)直接反射為Controller的函數(shù),而Stripes的設(shè)計可用annotation標(biāo)注url action到響應(yīng)函數(shù)的映射。

    3.3.xml宣告式編程的取舍 
        我的取舍很簡單,反正Spring沒有任何強制,我只在可能需要不重新編譯而改變某些東西的時候,才把東西放在xml里動態(tài)注入。jsp路徑之類的就統(tǒng)統(tǒng)收回到controller里面定義.

    3.4.Data Binder
       
    Data Binder是Controller的必有環(huán)節(jié),對于Spring提供的DataBinder,照理完全可用,唯一不爽是對象如果有內(nèi)嵌對象,如訂單對象里面包含了Customer對象,Spring需要你先自行創(chuàng)建了Customer對象并把它賦給了Order對象,才可能實現(xiàn) order.customer.customer_no這樣的綁定。我偷懶,又拿Jakarta BeanUtils出來自己做了一個Binder。

    3.5.提取基類
       
    最后還是忍不住提取了一個基類,負責(zé)MultiAction和其他一些簡便的方法。Sprnig的MultiActionController做得太死,規(guī)定所有函數(shù)的第1,2個參數(shù)必須是request和response,不懂動態(tài)的,溫柔的進行參數(shù)注入。

    經(jīng)過化簡再化簡,已經(jīng)是很簡單一個Java Bean ,任誰都可以輕松上手,即使某年某月技術(shù)的大潮把現(xiàn)在所有MVC框架都淹沒了,也不至于沒人識得維護。



    轉(zhuǎn)自http://blog.csdn.net/qking93415981/archive/2007/08/08/1731684.aspx
    posted on 2007-08-24 10:23 老賀 閱讀(659) 評論(1)  編輯  收藏 所屬分類: J2EE框架

    評論

    # re: 簡化Spring(3)--Controller層 2007-08-24 10:28 小賀
    Spring的MVC還沒用過。個人覺得,MVC框架,會使用一種就行了。除非原理差別比較大的,比如Struts系列(WebWork,Spring MVC等)和Tapstry系列(Wicket等),否則沒必要又精通Struts,又精通WebWork,項目遇到了現(xiàn)學(xué)就是。  回復(fù)  更多評論
      

    主站蜘蛛池模板: 国产精品无码免费视频二三区| 午夜国产精品免费观看| 亚洲综合久久久久久中文字幕| 亚欧国产一级在线免费| 亚洲人成国产精品无码| 又硬又粗又长又爽免费看 | 亚洲AV日韩AV永久无码下载| 中国一级全黄的免费观看| 亚洲一区二区三区影院| a级片免费在线播放| 亚洲第一成年男人的天堂| 老汉精品免费AV在线播放| 国产美女无遮挡免费视频网站| 亚洲国产精品ⅴa在线观看| 国产成人免费a在线视频app| 添bbb免费观看高清视频| 亚洲爽爽一区二区三区| 国产一二三四区乱码免费| 久久精品国产亚洲av影院| 成年午夜视频免费观看视频| 久久精品国产精品亚洲艾草网 | 亚洲AV无码不卡在线播放| 99久9在线|免费| 久久亚洲精品国产亚洲老地址| 在线观看亚洲免费视频| 中文字幕不卡高清免费| 亚洲精品综合久久中文字幕| 国语成本人片免费av无码| 1区1区3区4区产品亚洲| 在线观看免费宅男视频| 四虎永久在线精品免费一区二区| 日本亚洲欧洲免费天堂午夜看片女人员| 亚欧人成精品免费观看| 日韩在线视频免费| 亚洲AV无码国产丝袜在线观看| 日韩视频在线精品视频免费观看| 另类小说亚洲色图| 亚洲狠狠狠一区二区三区| 丁香亚洲综合五月天婷婷| 中文字幕免费视频| 亚洲美女免费视频|