<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      21 隨筆 :: 0 文章 :: 35 評(píng)論 :: 0 Trackbacks
        Struts與Webwork的扇子請(qǐng)?zhí)^(guò)本篇。

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

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

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

    2. 優(yōu)勢(shì)
       
    Spring MVC與struts相比的優(yōu)勢(shì):
        一是它的Controller有著從松到緊的類層次結(jié)構(gòu),用戶可以選擇實(shí)現(xiàn)只有一個(gè)HandleRequest()函數(shù)的接口,也可以使用它有很多回調(diào)函數(shù)的SimpleFormController類。
        二是不需要Form Bean,也不需要Tapestry那所謂面向?qū)ο蟮捻?yè)面對(duì)象,對(duì)于深怕類膨脹,改一個(gè)東西要?jiǎng)覰個(gè)地方的人最適合不過(guò)。
        三是不需要強(qiáng)XML配置文件,宣告式編程是好的,但如果強(qiáng)制成框架,什么都要在xml里面宣告,寫(xiě)的時(shí)候繁瑣,看的時(shí)候也要代碼配置兩邊看才能明白就比較麻煩了。

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

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

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

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

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

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

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



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

    評(píng)論

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

    主站蜘蛛池模板: 国产又黄又爽又大的免费视频| 亚洲色大成WWW亚洲女子| 毛片免费视频观看| 精品国产综合成人亚洲区| 一级毛片aa高清免费观看| 亚洲国产精品尤物yw在线| 美女视频黄频a免费大全视频| 国产成人综合久久精品免费| 亚洲第一成年网站视频| 日本一道高清不卡免费| 男男gvh肉在线观看免费| 免费亚洲视频在线观看| 一级做a爰片久久免费| 亚洲人成网站在线播放vr | 欧洲人成在线免费| 亚洲国产精彩中文乱码AV| 13小箩利洗澡无码视频网站免费| 亚洲中文字幕无码日韩| 日韩电影免费观看| 亚洲美女中文字幕| 国产免费av片在线看| 色噜噜噜噜亚洲第一| 99久久国产免费中文无字幕| 久久精品视频亚洲| 在线观看www日本免费网站| 亚洲一级大黄大色毛片| 精品国产麻豆免费网站| 99麻豆久久久国产精品免费| 中文字幕亚洲综合精品一区| 在线观看人成视频免费| 一区二区三区在线观看免费| 亚洲狠狠久久综合一区77777| 欧美在线看片A免费观看| 污网站免费在线观看| 无码欧精品亚洲日韩一区| 啦啦啦中文在线观看电视剧免费版 | 麻豆国产人免费人成免费视频| 一个人看的www在线免费视频 | 西西人体44rt高清亚洲 | 最新国产AV无码专区亚洲| 一本岛高清v不卡免费一三区|