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

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

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

    rosial

    lost memory
    數(shù)據(jù)加載中……

    zz - JAVA SSH 框架介紹

    原帖地址:http://hi.baidu.com/hahalgj/blog/item/5d773647067846056a63e556.html


    JAVA SSH框架在Struts + Spring + Hibernate的組合框架模式中,三者各自的特點都是什么? 

    Struts 的MVC設(shè)計模式可以使我們的邏輯變得很清晰。 
    Spring 的IOC和AOP可以使我們的產(chǎn)品在最大限度上解藕。 
    hibernate的當然就是實體對象的持久化了 

    典型的J2EE三層結(jié)構(gòu),分為表現(xiàn)層、中間層(業(yè)務(wù)邏輯層)和數(shù)據(jù)服務(wù)層。三層體系將業(yè)務(wù)規(guī)則、數(shù)據(jù)訪問及合法性校驗等工作放在中間層處理。客戶端不直接與數(shù)據(jù)庫交互,而是通過組件與中間層建立連接,再由中間層與數(shù)據(jù)庫交互。 

    表現(xiàn)層是傳統(tǒng)的JSP技術(shù),自1999年問世以來,經(jīng)過多年的發(fā)展,其廣泛的應(yīng)用和穩(wěn)定的表現(xiàn),為其作為表現(xiàn)層技術(shù)打下了堅實的基礎(chǔ)。 

    中間層采用的是流行的Spring+Hibernate,為了將控制層與業(yè)務(wù)邏輯層分離,又細分為以下幾種。 

    Web層,就是MVC模式里面的“C”(controller),負責控制業(yè)務(wù)邏輯層與表現(xiàn)層的交互,調(diào)用業(yè)務(wù)邏輯層,并將業(yè)務(wù)數(shù)據(jù)返回給表現(xiàn)層作組織表現(xiàn),該系統(tǒng)的MVC框架采用Struts。 

    Service層(就是業(yè)務(wù)邏輯層),負責實現(xiàn)業(yè)務(wù)邏輯。業(yè)務(wù)邏輯層以DAO層為基礎(chǔ),通過對DAO組件的正面模式包裝,完成系統(tǒng)所要求的業(yè)務(wù)邏輯。 

    DAO層,負責與持久化對象交互。該層封裝了數(shù)據(jù)的增、刪、查、改的操作。 

    PO,持久化對象。通過實體關(guān)系映射工具將關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)映射成對象,很方便地實現(xiàn)以面向?qū)ο蠓绞讲僮鲾?shù)據(jù)庫,該系統(tǒng)采用Hibernate作為ORM框架。 

    Spring的作用貫穿了整個中間層,將Web層、Service層、DAO層及PO無縫整合,其數(shù)據(jù)服務(wù)層用來存放數(shù)據(jù)。 

    一個良好的框架可以讓開發(fā)人員減輕重新建立解決復(fù)雜問題方案的負擔和精力;它可以被擴展以進行內(nèi)部的定制化;并且有強大的用戶社區(qū)來支持它。框架通常能很好的解決一個問題。然而,你的應(yīng)用是分層的,可能每一個層都需要各自的框架。僅僅解決UI問題并不意味著你能夠很好的將業(yè)務(wù)邏輯和持久性邏輯和UI 組件很好的耦合。 



    不可否認,對于簡單的應(yīng)用,采用ASP或者PHP的開發(fā)效率比采用J2EE框架的開發(fā)效率要高。甚至有人會覺得:這種分層的結(jié)構(gòu),比一般采用JSP + Servlet的系統(tǒng)開發(fā)效率還要低。 

    筆者從一下幾個角度來闡述這個問題。 

    — 開發(fā)效率:軟件工程是個特殊的行業(yè),不同于傳統(tǒng)的工業(yè),例如電器、建筑及汽車等行業(yè)。這些行業(yè)的產(chǎn)品一旦開發(fā)出來,交付用戶使用后將很少需要后續(xù)的維護。但軟件行業(yè)不同,軟件產(chǎn)品的后期運行維護是個巨大的工程,單純從前期開發(fā)時間上考慮其開發(fā)效率是不理智的,也是不公平的。眾所周知,對于傳統(tǒng)的ASP和 PHP等腳本站點技術(shù),將整個站點的業(yè)務(wù)邏輯和表現(xiàn)邏輯都混雜在ASP或PHP頁面里,從而導(dǎo)致頁面的可讀性相當差,可維護性非常低。即使需要簡單改變頁面的按鈕,也不得不打開頁面文件,冒著破壞系統(tǒng)的風險。但采用嚴格分層J2EE架構(gòu),則可完全避免這個問題。對表現(xiàn)層的修改即使發(fā)生錯誤,也絕對不會將錯誤擴展到業(yè)務(wù)邏輯層,更不會影響持久層。因此,采用J2EE分層架構(gòu),即使前期的開發(fā)效率稍微低一點,但也是值得的。 

    — 需求的變更:以筆者多年的開發(fā)經(jīng)驗來看,很少有軟件產(chǎn)品的需求從一開始就完全是固定的。客戶對軟件需求,是隨著軟件開發(fā)過程的深入,不斷明晰起來的。因此,常常遇到軟件開發(fā)到一定程度時,由于客戶對軟件需求發(fā)生了變化,使得軟件的實現(xiàn)不得不隨之改變。當軟件實現(xiàn)需要改變時,是否可以盡可能多地保留軟件的部分,盡可能少地改變軟件的實現(xiàn),從而滿足客戶需求的變更?答案是——采用優(yōu)秀的解耦架構(gòu)。這種架構(gòu)就是J2EE的分層架構(gòu),在優(yōu)秀的分層架構(gòu)里,控制層依賴于業(yè)務(wù)邏輯層,但絕不與任何具體的業(yè)務(wù)邏輯組件耦合,只與接口耦合;同樣,業(yè)務(wù)邏輯層依賴于DAO層,也不會與任何具體的DAO組件耦合,而是面向接口編程。采用這種方式的軟件實現(xiàn),即使軟件的部分發(fā)生改變,其他部分也盡可能不要改變。 

    注意:即使在傳統(tǒng)的硬件行業(yè),也有大量的接口規(guī)范。例如PCI接口、顯卡或者網(wǎng)卡,只要其遵守PCI的規(guī)范,就可以插入主板,與主板通信。至于這塊卡內(nèi)部的實現(xiàn),不是主板所關(guān)心的,這也正是面向接口編程的好處。假如需要提高電腦的性能,需要更新顯卡,只要更換另一塊PCI接口的顯卡,而不是將整臺電腦拋棄。如果一臺電腦不是采用各種接口組合在一起,而是做成整塊,那將意味著即使只需要更新網(wǎng)卡,也要放棄整臺電腦。同樣,對于軟件中的一個個組件,當一個組件需要重構(gòu)時,盡量不會影響到其他組件。實際上,這是最理想的情況,即使采用目前最優(yōu)秀的架構(gòu),也會有或多或少的影響,這也是軟件工程需要努力提高的地方。 

    技術(shù)的更新,系統(tǒng)重構(gòu):軟件行業(yè)的技術(shù)更新很快,雖然軟件行業(yè)的發(fā)展不快,但小范圍的技術(shù)更新特別快。一旦由于客觀環(huán)境的變化,不得不更換技術(shù)時,如何保證系統(tǒng)的改變最小呢?答案還是選擇優(yōu)秀的架構(gòu)。 

    在傳統(tǒng)的Model 1的程序結(jié)構(gòu)中,只要有一點小的需求發(fā)生改變,將意味著放棄整個頁面。或者改寫。雖然前期的開發(fā)速度快,除非可以保證以后永遠不會改變應(yīng)用的結(jié)構(gòu),否則不要采用Model 1的結(jié)構(gòu)。 

    采用Hibernate作為持久層技術(shù)的最大的好處在于:可以完全以面向?qū)ο蟮姆绞竭M行系統(tǒng)分析、系統(tǒng)設(shè)計。 

    DAO模式需要為每個DAO組件編寫DAO接口,同時至少提供一個實現(xiàn)類,根據(jù)不同需要,可能有多個實現(xiàn)類。用Spring容器代替DAO工廠 

    通常情況下,引入接口就不可避免需要引入工廠來負責DAO組件的生成。Spring實現(xiàn)了兩種基本模式:單態(tài)模式和工廠模式。而使用Spring可以完全避免使用工廠模式,因為Spring就是個功能非常強大的工廠。因此,完全可以讓Spring充當DAO工廠。 

    由Spring充當DAO工廠時,無須程序員自己實現(xiàn)工廠模式,只需要將DAO組件配置在Spring容器中,由ApplicationContext負責管理DAO組件的創(chuàng)建即可。借助于Spring提供的依賴注入,其他組件甚至不用訪問工廠,一樣可以直接使用DAO實例。 

    優(yōu)點: 
    Struts跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟件,這是它的一大優(yōu)點。使開發(fā)者能更深入的了解其內(nèi)部實現(xiàn)機制。 
    除此之外,Struts的優(yōu)點主要集中體現(xiàn)在兩個方面:Taglib和頁面導(dǎo)航。Taglib是Struts的標記庫,靈活動用,能大大提高開發(fā)效率。另外,就目前國內(nèi)的JSP開發(fā)者而言,除了使用JSP自帶的常用標記外,很少開發(fā)自己的標記,或許Struts是一個很好的起點。 
    關(guān)于頁面導(dǎo)航,我認為那將是今后的一個發(fā)展方向,事實上,這樣做,使系統(tǒng)的脈絡(luò)更加清晰。通過一個配置文件,即可把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護有著莫大的好處。尤其是當另一批開發(fā)者接手這個項目時,這種優(yōu)勢體現(xiàn)得更加明顯。 
    缺點: 
    Taglib是Struts的一大優(yōu)勢,但對于初學者而言,卻需要一個持續(xù)學習的過程,甚至還會打亂你網(wǎng)頁編寫的習慣,但是,當你習慣了它時,你會覺得它真的很棒。 
    Struts將MVC的Controller一分為三,在獲得結(jié)構(gòu)更加清晰的同時,也增加了系統(tǒng)的復(fù)雜度。 
    Struts從產(chǎn)生到現(xiàn)在還不到半年,但已逐步越來越多運用于商業(yè)軟件。雖然它現(xiàn)在還有不少缺點,但它是一種非常優(yōu)秀的J2EE MVC實現(xiàn)方式,如果你的系統(tǒng)準備采用J2EE MVC架構(gòu),那么,不妨考慮一下Struts。 

    posted on 2011-12-04 17:34 rosial 閱讀(288) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品无码永久在线观看你懂的| 色吊丝最新永久免费观看网站| 久久久久亚洲精品无码网址 | 免费视频爱爱太爽了| 久久亚洲精品AB无码播放| 免费播放在线日本感人片| 91麻豆精品国产自产在线观看亚洲| 一级做a爰片久久毛片免费陪| 亚洲天堂中文字幕| 精品四虎免费观看国产高清午夜| 日本亚洲视频在线| 性xxxxx大片免费视频| 久久亚洲熟女cc98cm| 亚洲成在人线aⅴ免费毛片| 亚洲中文字幕一区精品自拍| 日韩免费无砖专区2020狼| 国产亚洲精彩视频| 亚洲中文字幕无码一久久区| 最近免费中文字幕MV在线视频3| 亚洲成熟xxxxx电影| 三年片在线观看免费观看高清电影 | 亚洲伊人久久大香线焦| 午夜爱爱免费视频| 中美日韩在线网免费毛片视频| 亚洲综合无码精品一区二区三区| 91视频免费网址| 亚洲av中文无码字幕色不卡| 全黄a免费一级毛片人人爱| 中国一级特黄的片子免费| 久久亚洲精品中文字幕| 好吊妞在线成人免费| 人妻仑刮八A级毛片免费看| 亚洲区小说区图片区QVOD| 亚洲一区二区三区免费观看| 国产亚洲视频在线观看网址| 久久久无码精品亚洲日韩蜜桃| 成人免费午间影院在线观看| www.xxxx.com日本免费| 亚洲一卡2卡4卡5卡6卡在线99| 亚洲国产a级视频| 国产h肉在线视频免费观看|