国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JavaOne大會(huì)發(fā)布《J2EE核心模式》第二版

2019-11-18 12:18:03
字體:
供稿:網(wǎng)友

  http://developer.java.sun.com/developer/technicalArticles/J2EE/J2EEevolution/
  by Dan Malks和Deepak Alur
  June 2003
  
  
  
  在2001年的JavaOne大會(huì)上,我們推出了《J2EE核心模式》,里面包含一個(gè)模式目錄,該模式目錄中涉及了15個(gè)J2EE的設(shè)計(jì)模式。這些模式是J2EE平臺(tái)下軟件設(shè)計(jì)師和系統(tǒng)架構(gòu)師經(jīng)常碰到的典型問題及其解決方案。這本書里面也列舉了無數(shù)糟糕的實(shí)現(xiàn)并對(duì)它們進(jìn)行了重構(gòu),通過這些例子的學(xué)習(xí),你可以改善你現(xiàn)有的設(shè)計(jì)。所有的這些模式都是在我們給客戶創(chuàng)建成功的J2EE應(yīng)用過程中被發(fā)現(xiàn)并提煉出來的。
  
  
  
  模式與交流技術(shù)問題及其解決方案息息相關(guān),他們可以讓我們記錄一些反復(fù)出現(xiàn)的問題及其解決方案并與其他人進(jìn)行交流。寫《J2EE核心模式》的一個(gè)動(dòng)力就是人們常把“學(xué)習(xí)J2EE技術(shù)”與“學(xué)習(xí)用J2EE技術(shù)進(jìn)行設(shè)計(jì)”混淆起來。現(xiàn)存的許多Java書籍大都介紹J2EE技術(shù)的各個(gè)方面,卻幾乎沒有哪本書介紹如何應(yīng)用這些技術(shù)。基于作為Sun專家服務(wù)Java中心的Java系統(tǒng)架構(gòu)師的經(jīng)驗(yàn),我們覺得我們可以填補(bǔ)這個(gè)空白。
  
  
  
  不過那已經(jīng)是過去了,下面我們談現(xiàn)在
  
  
  
  《J2EE核心模式》第一版出版以后,我們收到讀者對(duì)那15個(gè)模式大量的反饋意見。過去的幾年中,J2EE模式討論區(qū)非常活躍,注冊(cè)會(huì)員也超過2000人。我們很興奮能從j2eepatterns-feedback@sun.com收到大量讀者的直接反饋意見。這幾年中,我們又做了幾個(gè)重要的大型J2EE結(jié)構(gòu),也參與幾個(gè)項(xiàng)目的開發(fā),其間我們不斷地應(yīng)用這些模式,同時(shí)又總結(jié)出了另外的一些模式。
  
  
  
  基于大家的反饋以及我們?cè)诠ぷ髦腥〉玫慕?jīng)驗(yàn),在2003年的JavaOne大會(huì)上,我們又推出該書的第二版。原有的15個(gè)模式全部都進(jìn)行了修正和更新,引進(jìn)許多新的實(shí)現(xiàn)策略和例程,增加了有關(guān)Web服務(wù)(Web service)的內(nèi)容,覆蓋了最新的J2EE1.4。我們又引進(jìn)了6個(gè)新的模式,那么現(xiàn)在一共有21個(gè)J2EE設(shè)計(jì)模式。新增加的6個(gè)模式主旨在于改進(jìn)模式語言,提供了高度抽象,你可以用來構(gòu)造和理解J2EE應(yīng)用。
  
  
  
  模式目錄
  
  
  
  我們?cè)诘诙娣N引入了6個(gè)新的模式,每一層兩個(gè):
  
  表示層模式:
  環(huán)境對(duì)象(Context Object)
  應(yīng)用控制器(application Controller )
  業(yè)務(wù)層:
  應(yīng)用服務(wù)(Application Service )
  業(yè)務(wù)對(duì)象(Business Object )
  集成層模式:
  域存儲(chǔ)(Domain Store)
  Web服務(wù)代理(Web Service Broker )
  下面圖中顯示了模式目錄中的21個(gè)模式,圖1、圖2、圖3分別顯示了各層中的模式,圖4顯示了各個(gè)模式之間的關(guān)系。請(qǐng)注重,所有的模式都已經(jīng)修正并更新過,包括了一些新的實(shí)現(xiàn)策略以及一些新的例程。
   JavaOne大會(huì)發(fā)布《J2EE核心模式》第二版(圖一)
  圖1:  表示層模式
   JavaOne大會(huì)發(fā)布《J2EE核心模式》第二版(圖二)
  圖2:  業(yè)務(wù)層模式
   JavaOne大會(huì)發(fā)布《J2EE核心模式》第二版(圖三)
  圖3:  集成層模式
   JavaOne大會(huì)發(fā)布《J2EE核心模式》第二版(圖四)
  圖4:  各模式之間的關(guān)系
  精選模式
  
  
  
  這一部分,我們對(duì)新引進(jìn)的6個(gè)模式的一小部分進(jìn)行一個(gè)簡(jiǎn)單的介紹。其他更具體的信息,包括其他模式、實(shí)現(xiàn)策略、例程、UML框圖、糟糕的實(shí)現(xiàn)及J2EE重構(gòu)等,請(qǐng)參考"J2EE核心模式"。
  
  
  
  雖然直到現(xiàn)在環(huán)境對(duì)象(Context Object)才被記錄為一個(gè)模式,但是實(shí)際上我們?cè)诠ぷ髦袝?huì)經(jīng)常用到它。環(huán)境對(duì)象(Context Object)的使用可以提高系統(tǒng)的的可復(fù)用性、可維護(hù)性、可擴(kuò)展性以及易測(cè)試性。下面我們介紹一下這個(gè)模式所涉及的問題、解決方案、UML類圖、UML序列圖以及使用這個(gè)模式的后果。
  
  
  
  環(huán)境對(duì)象(Context Object)
  
  
  
  問題
  
  你想避免在相關(guān)環(huán)境之外使用與系統(tǒng)特定協(xié)議有關(guān)的信息。
  
  
  
  一個(gè)應(yīng)用程序總是要通過請(qǐng)求/響應(yīng)的生命周期使用一些系統(tǒng)信息,比如請(qǐng)求信息、配置信息以及安全性數(shù)據(jù)等,這些系統(tǒng)信息總是與特定的處理環(huán)境有關(guān)。假如應(yīng)用程序的組件或服務(wù)在該特定環(huán)境之外直接使用這些系統(tǒng)信息的話,那么這些組件的靈活性和復(fù)用性就降低了。在特定環(huán)境的外部使用協(xié)議相關(guān)的API就意味著所有使用這些API的組件都被完全曝露了,并且過于暴露了細(xì)節(jié)。每一個(gè)客戶組件因而都與特定的協(xié)議緊緊綁定在一起。
  
  
  
  解決方案
  
  
  
  創(chuàng)建一個(gè)環(huán)境對(duì)象,以一種與協(xié)議無關(guān)的方式封裝系統(tǒng)信息,然后在整個(gè)應(yīng)用程序內(nèi)部使用這個(gè)環(huán)境對(duì)象。
  
  
  
  如下面圖5所示,把系統(tǒng)信息封裝在一個(gè)環(huán)境對(duì)象中,答應(yīng)程序的其它部分共享訪問,這樣就可以避免把應(yīng)用同特定的協(xié)議綁定在一起。比方說,Html form中每個(gè)域都是一個(gè)HTTP請(qǐng)求參數(shù),假如使用一個(gè)環(huán)境對(duì)象以一種與協(xié)議無關(guān)的方式存儲(chǔ)這些數(shù)據(jù)的話,那么數(shù)據(jù)的轉(zhuǎn)換和驗(yàn)證就會(huì)變得輕易一些。而且,程序的其它部分也可以直接從環(huán)境對(duì)象中訪問這些信息,不用考慮HTTP協(xié)議的問題。假如協(xié)議發(fā)生變化了,那么只用修改環(huán)境對(duì)象就行了,應(yīng)用程序的其它部分不用作任何改動(dòng)。
   JavaOne大會(huì)發(fā)布《J2EE核心模式》第二版(圖五)
  圖5: 環(huán)境對(duì)象(Context Object)的UML類圖
  
  結(jié)果
  
  提高了可復(fù)用性和可維護(hù)性
  既然應(yīng)用程序的接口獨(dú)立于特定協(xié)議,那么其中所定義的組件和子系統(tǒng)就更通用,可以被各種各樣的客戶端復(fù)用。
  提高了易測(cè)試性
  使用環(huán)境對(duì)象模式可以幫助清除與特定的Web容器或應(yīng)用服務(wù)器相關(guān)的代碼。假如限制或者消除了這些依靠,可以更輕易進(jìn)行測(cè)試。比如說可以使用一些自動(dòng)測(cè)試工具,例如使用JUnit來進(jìn)行自動(dòng)測(cè)試。
  降低了接口變化的約束
  原來應(yīng)用程序的接口接受大量的系統(tǒng)信息,現(xiàn)在使用環(huán)境對(duì)象封裝這些數(shù)據(jù),應(yīng)用程序只用接受環(huán)境對(duì)象就可以了。這樣可以降低應(yīng)用程序與特定平臺(tái)的耦合度,使得以后的修改可以更輕易進(jìn)行。這對(duì)于開發(fā)應(yīng)用程序框架非常重要,當(dāng)然對(duì)于開發(fā)通用程序也很有價(jià)值。
  性能的降低
  使用環(huán)境對(duì)象模式要在對(duì)象間傳遞各種數(shù)據(jù),因而會(huì)導(dǎo)致一定程度性能的下降。不過性能的些微下降與使用環(huán)境對(duì)象帶來的好處,比如應(yīng)用程序組件復(fù)用性提高、應(yīng)用更輕易維護(hù)和修改等等比起來,實(shí)在是微不足道。
  我們?cè)跇I(yè)務(wù)層模式中新增加了兩個(gè)模式,其中之一就是應(yīng)用服務(wù)(Application Service)。這個(gè)模式與普通的業(yè)務(wù)邏輯有關(guān)。因?yàn)榧偃缡褂?a href="http://m.survivalescaperooms.com/tag-10.html">session Façades的話,就會(huì)導(dǎo)致代碼重復(fù),而假如把這些邏輯封裝在業(yè)務(wù)對(duì)象(Business Object)的話,又會(huì)導(dǎo)致對(duì)象數(shù)量的劇增。
  
  
  
  應(yīng)用服務(wù)(Application Service)
  
  
  
  問題
  
  
  
  你想跨越幾個(gè)業(yè)務(wù)層組件和服務(wù)通過聚合來形成一個(gè)業(yè)務(wù)邏輯
  
  
  
  服務(wù)門面(Service facade),像Session Façade或者POJO Façade幾乎不包含業(yè)務(wù)邏輯,只是對(duì)外提供了一個(gè)簡(jiǎn)單的、粗糙的接口。業(yè)務(wù)對(duì)象(Business Object)封裝了一組相關(guān)業(yè)務(wù)操作的行為。用例(Use Case)用來協(xié)調(diào)這些業(yè)務(wù)對(duì)象和服務(wù),而應(yīng)用程序則用來實(shí)現(xiàn)這些用例。然而,你不應(yīng)該讓用例協(xié)調(diào)業(yè)務(wù)對(duì)象(Business Object)內(nèi)部的行為,這樣會(huì)增加依耦合性,降低這些業(yè)務(wù)對(duì)象間的內(nèi)聚力。同樣,你也不應(yīng)該把業(yè)務(wù)邏輯加到服務(wù)門面(Service facade)上,因?yàn)闃I(yè)務(wù)邏輯在不同的門面之間潛在地復(fù)制了代碼,這樣會(huì)降低通用代碼的復(fù)用性和可維護(hù)性。
  
  
  
  解決方案
  
  
  
  使用一個(gè)應(yīng)用服務(wù)(Application Service)聚合各種行為來提供一個(gè)統(tǒng)一的服務(wù)層。
  
  
  
  應(yīng)用服務(wù)(Application Service)提供了一個(gè)實(shí)現(xiàn)業(yè)務(wù)邏輯的中心位置,這個(gè)業(yè)務(wù)邏輯可能封裝了各種業(yè)務(wù)對(duì)象和服務(wù)。這種實(shí)現(xiàn)業(yè)務(wù)邏輯的方式,可以降低業(yè)務(wù)對(duì)象間的耦合性。使用應(yīng)用服務(wù)(Application Service)模式,你可以把分散的、使用底層業(yè)務(wù)對(duì)象和服務(wù)的組件封裝成為一個(gè)高級(jí)的業(yè)務(wù)邏輯。
  
  
  
  即使你的應(yīng)用程序中沒有用到業(yè)務(wù)對(duì)象(Business Object),你也可以使用業(yè)務(wù)服務(wù)(Application Service)模式來提供一個(gè)統(tǒng)一的業(yè)務(wù)邏輯實(shí)現(xiàn)層。這種情況下,應(yīng)用服務(wù)(Application Service)可能會(huì)包含你程序中實(shí)現(xiàn)不同服務(wù)必需的所有中間業(yè)務(wù)邏輯,假如要處理持久性數(shù)據(jù)的時(shí)候,可能還會(huì)包括數(shù)據(jù)訪問對(duì)象(Data access Object,DAO)。
  JavaOne大會(huì)發(fā)布《J2EE核心模式》第二版(圖六)
  圖6: 應(yīng)用服務(wù)(Application Service)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 墨江| 古交市| 始兴县| 壤塘县| 龙海市| 惠安县| 青铜峡市| 凤冈县| 呼图壁县| 凌源市| 建平县| 卢龙县| 青海省| 盐源县| 瑞昌市| 商河县| 抚宁县| 安化县| 宁阳县| 军事| 太原市| 东明县| 若尔盖县| 鞍山市| 绥滨县| 荣昌县| 得荣县| 营山县| 河南省| 乐陵市| 莱阳市| 河源市| 山西省| 襄城县| 旅游| 寿阳县| 偏关县| 光泽县| 胶州市| 公安县| 扎囊县|