tbwshc

          JAVA SSH框架 學(xué)習(xí)

          在Struts + Spring + Hibernate的組合框架模式中,三者各自的特點(diǎn)都是什么?
          Struts 的MVC設(shè)計(jì)模式可以使我們的邏輯變得很清晰。
          Spring 的IOC和AOP可以使我們的產(chǎn)品在最大限度上解藕。
          hibernate的當(dāng)然就是實(shí)體對象的持久化了
          典型的J2EE三層結(jié)構(gòu),分為表現(xiàn)層、中間層(業(yè)務(wù)邏輯層)和數(shù)據(jù)服務(wù)層。三層體系將業(yè)務(wù)規(guī)則、數(shù)據(jù)訪問及合法性校驗(yàn)等工作放在中間層處理。客戶端不直接與數(shù)據(jù)庫交互,而是通過組件與中間層建立連接,再由中間層與數(shù)據(jù)庫交互。
          表現(xiàn)層是傳統(tǒng)的JSP技術(shù),自1999年問世以來,經(jīng)過多年的發(fā)展tb其廣泛的應(yīng)用和穩(wěn)定的表現(xiàn),為其作為表現(xiàn)層技術(shù)打下了堅(jiān)實(shí)的基礎(chǔ)。
          中間層采用的是流行的Spring+Hibernate,為了將控制層與業(yè)務(wù)邏輯層分離,又細(xì)分為以下幾種。
          Web層,就是MVC模式里面的“C”(controller),負(fù)責(zé)控制業(yè)務(wù)邏輯層與表現(xiàn)層的交互,調(diào)用業(yè)務(wù)邏輯層,并將業(yè)務(wù)數(shù)據(jù)返回給表現(xiàn)層作組織表現(xiàn),該系統(tǒng)的MVC框架采用Struts。
          Service層(就是業(yè)務(wù)邏輯層),負(fù)責(zé)實(shí)現(xiàn)業(yè)務(wù)邏輯。業(yè)務(wù)邏輯層以DAO層為基礎(chǔ),通過對DAO組件的正面模式包裝,完成系統(tǒng)所要求的業(yè)務(wù)邏輯。
          DAO層,負(fù)責(zé)與持久化對象交互。該層封裝了數(shù)據(jù)的增、刪、查、改的操作。
          PO,持久化對象。通過實(shí)體關(guān)系映射工具將關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)映射成對象,很方便地實(shí)現(xiàn)以面向?qū)ο蠓绞讲僮鲾?shù)據(jù)庫,該系統(tǒng)采用Hibernate作為ORM框架。
          Spring的作用貫穿了整個(gè)中間層,將Web層、Service層、DAO層及PO無縫整合,其數(shù)據(jù)服務(wù)層用來存放數(shù)據(jù)。
          一個(gè)良好的框架可以讓開發(fā)人員減輕重新建立解決復(fù)雜問題方案的負(fù)擔(dān)和精力;它可以被擴(kuò)展以進(jìn)行內(nèi)部的定制化;并且有強(qiáng)大的用戶社區(qū)來支持它。框架通常能很好的解決一個(gè)問題。然而,你的應(yīng)用是分層的,可能每一個(gè)層都需要各自的框架。僅僅解決UI問題并不意味著你能夠很好的將業(yè)務(wù)邏輯和持久性邏輯和UI 組件很好的耦合。

          不可否認(rèn),對于簡單的應(yīng)用,采用ASP或者PHP的開發(fā)效率比采用J2EE框架的開發(fā)效率要高。甚至有人會(huì)覺得:這種分層的結(jié)構(gòu),比一般采用JSP + Servlet的系統(tǒng)開發(fā)效率還要低。
          筆者從一下幾個(gè)角度來闡述這個(gè)問題。
          — 開發(fā)效率:軟件工程是個(gè)特殊的行業(yè),不同于傳統(tǒng)的工業(yè),例如電器、建筑及汽車等行業(yè)。這些行業(yè)的產(chǎn)品一旦開發(fā)出來,交付用戶使用后將很少需要后續(xù)的維護(hù)。但軟件行業(yè)不同,軟件產(chǎn)品的后期運(yùn)行維護(hù)是個(gè)巨大的工程,單純從前期開發(fā)時(shí)間上考慮其開發(fā)效率是不理智的,也是不公平的。眾所周知,對于傳統(tǒng)的ASP和 PHP等腳本站點(diǎn)技術(shù),將整個(gè)站點(diǎn)的業(yè)務(wù)邏輯和表現(xiàn)邏輯都混雜在ASP或PHP頁面里,從而導(dǎo)致頁面的可讀性相當(dāng)差,可維護(hù)性非常低。即使需要簡單改變頁面的按鈕,也不得不打開頁面文件,冒著破壞系統(tǒng)的風(fēng)險(xiǎn)。但采用嚴(yán)格分層J2EE架構(gòu),則可完全避免這個(gè)問題。對表現(xiàn)層的修改即使發(fā)生錯(cuò)誤,也絕對不會(huì)將錯(cuò)誤擴(kuò)展到業(yè)務(wù)邏輯層,更不會(huì)影響持久層。因此,采用J2EE分層架構(gòu),即使前期的開發(fā)效率稍微低一點(diǎn),但也是值得的。
          — 需求的變更:以筆者多年的開發(fā)經(jīng)驗(yàn)來看,很少有軟件產(chǎn)品的需求從一開始就完全是固定的。客戶對軟件需求,是隨著軟件開發(fā)過程的深入,不斷明晰起來的。因此,常常遇到軟件開發(fā)到一定程度時(shí),由于客戶對軟件需求發(fā)生了變化,使得軟件的實(shí)現(xiàn)不得不隨之改變。當(dāng)軟件實(shí)現(xiàn)需要改變時(shí),是否可以盡可能多地保留軟件的部分,盡可能少地改變軟件的實(shí)現(xiàn),從而滿足客戶需求的變更?答案是——采用優(yōu)秀的解耦架構(gòu)。這種架構(gòu)就是J2EE的分層架構(gòu),在優(yōu)秀的分層架構(gòu)里,控制層依賴于業(yè)務(wù)邏輯層,但絕不與任何具體的業(yè)務(wù)邏輯組件耦合,只與接口耦合;同樣,業(yè)務(wù)邏輯層依賴于DAO層,也不會(huì)與任何具體的DAO組件耦合,而是面向接口編程。采用這種方式的軟件實(shí)現(xiàn),即使軟件的部分發(fā)生改變,其他部分也盡可能不要改變。
          注意:即使在傳統(tǒng)的硬件行業(yè),也有大量的接口規(guī)范。例如PCI接口、顯卡或者網(wǎng)卡,只要其遵守PCI的規(guī)范,就可以插入主板,與主板通信。至于這塊卡內(nèi)部的實(shí)現(xiàn),不是主板所關(guān)心的,這也正是面向接口編程的好處。假如需要提高電腦的性能,需要更新顯卡,只要更換另一塊PCI接口的顯卡,而不是將整臺電腦拋棄。如果一臺電腦不是采用各種接口組合在一起,而是做成整塊,那將意味著即使只需要更新網(wǎng)卡,也要放棄整臺電腦。同樣,對于軟件中的一個(gè)個(gè)組件,當(dāng)一個(gè)組件需要重構(gòu)時(shí),盡量不會(huì)影響到其他組件。實(shí)際上,這是最理想的情況,即使采用目前最優(yōu)秀的架構(gòu),也會(huì)有或多或少的影響,這也是軟件工程需要努力提高的地方。
          技術(shù)的更新,系統(tǒng)重構(gòu):軟件行業(yè)的技術(shù)更新很快,雖然軟件行業(yè)的發(fā)展不快,但小范圍的技術(shù)更新特別快。一旦由于客觀環(huán)境的變化,不得不更換技術(shù)時(shí),如何保證系統(tǒng)的改變最小呢?答案還是選擇優(yōu)秀的架構(gòu)。
          在傳統(tǒng)的Model 1的程序結(jié)構(gòu)中,只要有一點(diǎn)小的需求發(fā)生改變,將意味著放棄整個(gè)頁面。或者改寫。雖然前期的開發(fā)速度快,除非可以保證以后永遠(yuǎn)不會(huì)改變應(yīng)用的結(jié)構(gòu),否則不要采用Model 1的結(jié)構(gòu)。
          采用Hibernate作為持久層技術(shù)的最大的好處在于:可以完全以面向?qū)ο蟮姆绞竭M(jìn)行系統(tǒng)分析、系統(tǒng)設(shè)計(jì)。
          DAO模式需要為每個(gè)DAO組件編寫DAO接口,同時(shí)至少提供一個(gè)實(shí)現(xiàn)類,根據(jù)不同需要,可能有多個(gè)實(shí)現(xiàn)類。用Spring容器代替DAO工廠
          通常情況下,引入接口就不可避免需要引入工廠來負(fù)責(zé)DAO組件的生成。Spring實(shí)現(xiàn)了兩種基本模式:單態(tài)模式和工廠模式。而使用Spring可以完全避免使用工廠模式,因?yàn)镾pring就是個(gè)功能非常強(qiáng)大的工廠。因此,完全可以讓Spring充當(dāng)DAO工廠。
          由Spring充當(dāng)DAO工廠時(shí),無須程序員自己實(shí)現(xiàn)工廠模式,只需要將DAO組件配置在Spring容器中,由ApplicationContext負(fù)責(zé)管理DAO組件的創(chuàng)建即可。借助于Spring提供的依賴注入,其他組件甚至不用訪問工廠,一樣可以直接使用DAO實(shí)例。
          優(yōu)點(diǎn):
          Struts跟Tomcat、Turbine等諸多Apache項(xiàng)目一樣,是開源軟件,這是它的一大優(yōu)點(diǎn)。使開發(fā)者能更深入的了解其內(nèi)部實(shí)現(xiàn)機(jī)制。
          除此之外,Struts的優(yōu)點(diǎn)主要集中體現(xiàn)在兩個(gè)方面:Taglib和頁面導(dǎo)航。Taglib是Struts的標(biāo)記庫,靈活動(dòng)用,能大大提高開發(fā)效率。另外,就目前國內(nèi)的JSP開發(fā)者而言,除了使用JSP自帶的常用標(biāo)記外,很少開發(fā)自己的標(biāo)記,或許Struts是一個(gè)很好的起點(diǎn)。
          關(guān)于頁面導(dǎo)航,我認(rèn)為那將是今后的一個(gè)發(fā)展方向,事實(shí)上,這樣做,使系統(tǒng)的脈絡(luò)更加清晰。通過一個(gè)配置文件,即可把握整個(gè)系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護(hù)有著莫大的好處。尤其是當(dāng)另一批開發(fā)者接手這個(gè)項(xiàng)目時(shí),這種優(yōu)勢體現(xiàn)得更加明顯。
          缺點(diǎn):
          Taglib是Struts的一大優(yōu)勢,但對于初學(xué)者而言,卻需要一個(gè)持續(xù)學(xué)習(xí)的過程,甚至還會(huì)打亂你網(wǎng)頁編寫的習(xí)慣,但是,當(dāng)你習(xí)慣了它時(shí),你會(huì)覺得它真的很棒。
          Struts將MVC的Controller一分為三,在獲得結(jié)構(gòu)更加清晰的同時(shí),也增加了系統(tǒng)的復(fù)雜度。
          Struts從產(chǎn)生到現(xiàn)在還不到半年,但已逐步越來越多運(yùn)用于商業(yè)軟件。雖然它現(xiàn)在還有不少缺點(diǎn),但它是一種非常優(yōu)秀的J2EE MVC實(shí)現(xiàn)方式,如果你的系統(tǒng)準(zhǔn)備采用J2EE MVC架構(gòu),那么,不妨考慮一下Struts。

          posted on 2012-07-25 15:25 chen11-1 閱讀(2074) 評論(0)  編輯  收藏

          主站蜘蛛池模板: 龙海市| 来宾市| 班戈县| 辽宁省| 杭州市| 咸阳市| 德化县| 宁阳县| 萨嘎县| 巴林右旗| 平和县| 温泉县| 阿克陶县| 和平区| 新竹市| 拉萨市| 平昌县| 灌阳县| 河南省| 东明县| 商河县| 正蓝旗| 彩票| 黑水县| 黑龙江省| 静乐县| 安多县| 富顺县| 龙游县| 大化| 盐津县| 兴隆县| 深圳市| 永昌县| 睢宁县| 云梦县| 琼海市| 曲水县| 丘北县| 炉霍县| 吉首市|