freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

j2ee與net技術(shù)體系的結(jié)構(gòu)設(shè)計(jì)(編輯修改稿)

2025-08-26 03:58 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 輸對(duì)象是通過(guò)值傳遞而交送給用戶(hù)的,所以所有對(duì)于該傳輸對(duì)象的調(diào)用或取值都是本地調(diào)用,而不是遠(yuǎn)程方法調(diào)用。不過(guò)需要注意的是,這個(gè)傳輸對(duì)象必須具有對(duì)應(yīng)于每個(gè)屬性的訪問(wèn)方法,或者將所有屬性都設(shè)為公共的。 類(lèi)圖13表示了傳輸對(duì)象模式的體系結(jié)構(gòu)。 圖13 傳輸對(duì)象類(lèi)圖在圖13中,傳輸對(duì)象首先在EJB中創(chuàng)建,然后返回給遠(yuǎn)程客戶(hù);當(dāng)然,傳輸對(duì)象也可以根據(jù)需要融合其他的設(shè)計(jì)模式。 圖14顯示了傳輸對(duì)象模式中的參與模塊和它們之間的交互。圖14 傳輸對(duì)象序列圖 下面我們說(shuō)明一下傳輸對(duì)象模式的各個(gè)參與模塊: (1)客戶(hù)(Client)。客戶(hù)代表了EJB所提供服務(wù)的使用者,通常是運(yùn)行于用戶(hù)終端的應(yīng)用程序。 (2)業(yè)務(wù)對(duì)象。業(yè)務(wù)對(duì)象表示在一個(gè)模式中由會(huì)話bean、實(shí)體bean或數(shù)據(jù)訪問(wèn)對(duì)象(Data Access Object)實(shí)現(xiàn)的角色。業(yè)務(wù)對(duì)象通常負(fù)責(zé)創(chuàng)建傳輸對(duì)象,并根據(jù)請(qǐng)求將其傳送到相關(guān)的用戶(hù);業(yè)務(wù)對(duì)象也可以從用戶(hù)中取得一個(gè)傳輸對(duì)象格式的數(shù)據(jù),并應(yīng)用這些數(shù)據(jù)來(lái)執(zhí)行一些更新。 (3)傳輸對(duì)象。傳輸對(duì)象是一個(gè)可序列化的Java對(duì)象。在這個(gè)對(duì)象的類(lèi)中,通常會(huì)有一個(gè)包含所有域的構(gòu)造函數(shù),用來(lái)創(chuàng)建這個(gè)傳輸對(duì)象。 這個(gè)傳輸對(duì)象中的成員變量基本都被定義為公共,從而無(wú)需為它們提供相關(guān)的訪問(wèn)方法。當(dāng)然如果存在一定安全的需要,相關(guān)的成員變量也可以設(shè)為保護(hù)或私有,并且給定各自的訪問(wèn)方法。由此可見(jiàn),傳輸對(duì)象的設(shè)計(jì)是隨著應(yīng)用系統(tǒng)的需要不同而改變的,是否將對(duì)象中的成員變量設(shè)為公共,或提供一定的訪問(wèn)方法,將是一個(gè)很重要的設(shè)計(jì)問(wèn)題。 通常在實(shí)現(xiàn)這個(gè)模式時(shí),最多采取的是可更新的傳輸對(duì)象策略和多傳輸對(duì)象策略。 在可更新的傳輸對(duì)象策略中,傳輸對(duì)象不僅可以從服務(wù)于用戶(hù)的業(yè)務(wù)對(duì)象中取得相關(guān)信息和數(shù)據(jù),還可以從業(yè)務(wù)對(duì)象中得到用戶(hù)對(duì)于數(shù)據(jù)所需要進(jìn)行的改變。 圖15以類(lèi)圖表的形式表明了業(yè)務(wù)對(duì)象和傳輸對(duì)象之間的關(guān)系。 圖15 可更新傳輸對(duì)象類(lèi)圖 業(yè)務(wù)對(duì)象創(chuàng)建了傳輸對(duì)象。而用戶(hù)通過(guò)訪問(wèn)業(yè)務(wù)對(duì)象,既得到了所需的信息,也對(duì)相關(guān)數(shù)據(jù)做出了一定的修改;為了能夠使得用戶(hù)可以修改業(yè)務(wù)對(duì)象各個(gè)域的取值,這個(gè)對(duì)象必須提供一定的變值方法,而出于對(duì)Web負(fù)擔(dān)的考慮,業(yè)務(wù)對(duì)象所提供的方法最好以傳輸對(duì)象為參數(shù)。相應(yīng)地,這些方法可以去調(diào)用傳輸對(duì)象所提供的方法,來(lái)設(shè)置傳輸對(duì)象的各個(gè)成員變量的取值;同時(shí)在傳輸對(duì)象的方法中,我們也可以植入數(shù)據(jù)驗(yàn)證和完整性檢查的邏輯,這樣在用戶(hù)從業(yè)務(wù)對(duì)象的方法得到傳輸對(duì)象時(shí),可以直接調(diào)用傳輸對(duì)象的成員方法進(jìn)行本地?cái)?shù)據(jù)訪問(wèn),當(dāng)然這種本地?cái)?shù)據(jù)訪問(wèn)不會(huì)影響到業(yè)務(wù)對(duì)象。 當(dāng)用戶(hù)調(diào)用業(yè)務(wù)對(duì)象的變值方法時(shí),該方法會(huì)將用戶(hù)端的傳輸對(duì)象序列化,再將它發(fā)送給業(yè)務(wù)對(duì)象;業(yè)務(wù)對(duì)象接收到更新的傳輸對(duì)象,便將這些更新寫(xiě)回到自己的對(duì)象拷貝中去; 這里需要說(shuō)明的是,上面提到的寫(xiě)回只是涉及到被更新的變量,而不是全部變量的寫(xiě)回,因此我們需要在傳輸對(duì)象中另設(shè)置一個(gè)變量,來(lái)指定哪些成員變量被用戶(hù)更新過(guò),這也就使得這種模式的設(shè)計(jì)相對(duì)復(fù)雜,開(kāi)發(fā)人員需要考慮同步化和版本控制的問(wèn)題。圖16顯示了這個(gè)更新過(guò)程的序列圖。圖16 可更新傳輸對(duì)象序列圖 多傳輸對(duì)象的方法是指一個(gè)單一的業(yè)務(wù)對(duì)象可以根據(jù)用戶(hù)請(qǐng)求制造多個(gè)不同的傳輸對(duì)象。也就是說(shuō),業(yè)務(wù)對(duì)象和它所創(chuàng)建的傳輸對(duì)象保持一對(duì)多的關(guān)系。類(lèi)圖17表示了這種實(shí)現(xiàn)方法的各個(gè)參與模塊以及它們之間的調(diào)用關(guān)系。圖17 多傳輸對(duì)象類(lèi)圖當(dāng)一個(gè)用戶(hù)需要A類(lèi)型的傳輸對(duì)象時(shí),他會(huì)激活相關(guān)EJB的getDataA()方法來(lái)取得傳輸對(duì)象A;當(dāng)他需要B類(lèi)型的傳輸對(duì)象時(shí),他會(huì)激活getDataB()方法來(lái)獲取傳輸對(duì)象B;依此類(lèi)推。序列圖18表示了這一過(guò)程。圖18 多傳輸對(duì)象序列圖使用這種設(shè)計(jì)模式,應(yīng)用系統(tǒng)的實(shí)體bean及其遠(yuǎn)程接口會(huì)變得十分簡(jiǎn)單。實(shí)體bean中無(wú)需再為每一個(gè)成員變量都實(shí)現(xiàn)一個(gè)set()和get()方法,并在遠(yuǎn)程接口中實(shí)現(xiàn)相應(yīng)的定義。用戶(hù)無(wú)需再進(jìn)行多次的方法調(diào)用來(lái)取得信息和數(shù)據(jù),所需要的只是一次方法調(diào)用以獲得整個(gè)傳輸對(duì)象。當(dāng)然這里需要考慮Web負(fù)擔(dān)和大量數(shù)據(jù)一次傳輸?shù)臋?quán)衡。開(kāi)發(fā)人員可以根據(jù)不同的需要來(lái)選擇不同的實(shí)現(xiàn)方法。 如上所述,用戶(hù)和實(shí)體bean之間可以通過(guò)在一次方法調(diào)用中使用傳輸對(duì)象而交換所有的數(shù)據(jù),也就是說(shuō)傳輸對(duì)象作為數(shù)據(jù)載體工作,并減少了遠(yuǎn)程的方法調(diào)用,從而大大減輕了Web負(fù)擔(dān)。通過(guò)使用傳輸對(duì)象的方法,我們也將有可能減少實(shí)體bean和其傳輸對(duì)象間的代碼重復(fù)。不過(guò)在使用可更新的傳輸對(duì)象方法時(shí),用戶(hù)可以修改其本地的傳輸對(duì)象,之后再將其傳送回業(yè)務(wù)對(duì)象中,后者將所需的更新整合到自己一端;但是這樣一來(lái),就會(huì)存在一個(gè)版本控制的問(wèn)題,不同的客戶(hù)可能在同時(shí)修改相同類(lèi)型的傳輸對(duì)象,而如果相關(guān)的業(yè)務(wù)對(duì)象沒(méi)有發(fā)現(xiàn)這一點(diǎn)的話,可能就會(huì)造成一些用戶(hù)的數(shù)據(jù)沒(méi)有得到及時(shí)更新,而另外一些用戶(hù)的數(shù)據(jù)又被覆蓋的情況;在系統(tǒng)設(shè)計(jì)中必須考慮這個(gè)問(wèn)題。截取過(guò)濾器截取過(guò)濾器(intercepting filter)主要用于對(duì)于用戶(hù)請(qǐng)求的之前處理和之后處理,也就是說(shuō)它對(duì)于客戶(hù)的請(qǐng)求使用了額外的操作。比如說(shuō),servlet可以處理一個(gè)網(wǎng)站的所有客戶(hù)請(qǐng)求并提供一個(gè)核心的認(rèn)證機(jī)制。這種模式主要工作于表示層,負(fù)責(zé)處理不同類(lèi)型的請(qǐng)求,同時(shí)也需要進(jìn)行多種不同的處理。在這些請(qǐng)求中,有一些請(qǐng)求會(huì)直接傳送給后端模塊處理,而另外一些請(qǐng)求則先會(huì)在過(guò)濾器里解釋或補(bǔ)充內(nèi)容,之后才能傳送給后端模塊。這種模式的提出主要是由于一個(gè)客戶(hù)的Web訪問(wèn)和系統(tǒng)響應(yīng)都需要一定的預(yù)處理和后處理,例如用戶(hù)身份、用戶(hù)環(huán)境信息、用戶(hù)請(qǐng)求的合法性等。通常這些處理的結(jié)果都會(huì)決定用戶(hù)的請(qǐng)求是否能夠進(jìn)行,或是系統(tǒng)的響應(yīng)應(yīng)該用什么格式來(lái)表示。對(duì)于這種預(yù)處理和后處理問(wèn)題,傳統(tǒng)上,開(kāi)發(fā)人員會(huì)設(shè)計(jì)一系列額外的檢測(cè)程序模塊,也就是一整套if/else語(yǔ)句,并且指定如果其中任何一個(gè)檢測(cè)失敗,所有的處理工作都會(huì)退出。顯然,這種方法是存在很大弊端的,即代碼的可讀性、可維護(hù)性都會(huì)被大大降低,同時(shí)將檢測(cè)工作融于一般的程序模塊,使得整個(gè)程序的模塊性難以保證。解決這種問(wèn)題的關(guān)鍵在于,設(shè)計(jì)一種簡(jiǎn)單的技術(shù),以能夠添加或移除額外處理的模塊,而這些模塊通常都能夠完成一定的檢測(cè)和過(guò)濾功能。根據(jù)以上的討論,J2EE研究人員提出了設(shè)計(jì)模式截取過(guò)濾器作為解決方案,這種模式可以在不影響核心處理模塊的情況下,實(shí)現(xiàn)可插入的過(guò)濾器來(lái)執(zhí)行一般的處理功能。從理論上來(lái)說(shuō),這種過(guò)濾器可以截取客戶(hù)請(qǐng)求和系統(tǒng)響應(yīng),并進(jìn)行相應(yīng)的預(yù)處理和后處理;同時(shí)開(kāi)發(fā)人員也可以隨時(shí)根據(jù)需要移除這些過(guò)濾器,并不用擔(dān)心會(huì)改變?nèi)魏纹渌K。我們這里所說(shuō)的預(yù)處理和后處理功能,通常是指一些基本的系統(tǒng)服務(wù),如安全、登錄,系統(tǒng)調(diào)試等。執(zhí)行這些功能的過(guò)濾器通常是需要與核心模塊分開(kāi)的,并且由于系統(tǒng)職能或規(guī)則的變化,這些模塊隨時(shí)可能被添加或刪除。下面提供一些關(guān)于截取過(guò)濾器的圖示,以幫助大家更好地理解這種設(shè)計(jì)模式,并合理地加以運(yùn)用。圖19表示了截取過(guò)濾器模式的整體結(jié)構(gòu),圖19顯示了截取過(guò)濾器中的參與模塊和相互之間的聯(lián)系。 圖19 截取過(guò)濾器模式 圖20 截取過(guò)濾器序列圖下面我們分別來(lái)說(shuō)明圖20中的各個(gè)模塊:(1)過(guò)濾管理器(Filter Manager)。過(guò)濾管理器負(fù)責(zé)過(guò)濾器的主要處理工作,即創(chuàng)建過(guò)濾器鏈對(duì)象以及相應(yīng)的過(guò)濾器組建,并初始化整個(gè)處理過(guò)程。(2)過(guò)濾器鏈(Filter Chain)。過(guò)濾器鏈?zhǔn)且唤M互不依賴(lài)的過(guò)濾器有序集合。(3)過(guò)濾器1,過(guò)濾器2,過(guò)濾器3(FilterOne,F(xiàn)ilterTwo,F(xiàn)ilterThree)。這些都是提供不同服務(wù)的過(guò)濾器,而過(guò)濾器鏈則負(fù)責(zé)它們的協(xié)調(diào)工作。通過(guò)采用這種設(shè)計(jì)模式,應(yīng)用系統(tǒng)可以取得更方便的中心控制,這是由于過(guò)濾器可以提供處理多種請(qǐng)求的中心模塊,并能根據(jù)后端的處理模塊而解釋和潤(rùn)色用戶(hù)的請(qǐng)求,使得該請(qǐng)求能更好地與處理模塊所提供的功能匹配。另外,過(guò)濾器通常可以將不同種類(lèi)的服務(wù)聚集在一起,并提供相當(dāng)靈活的服務(wù)組合,應(yīng)用系統(tǒng)可以通過(guò)使用截取過(guò)濾器提高其重用性,過(guò)濾器可以隨時(shí)根據(jù)需要從其他程序模塊中插入或移除,并且由于它們通常具有標(biāo)準(zhǔn)的接口,開(kāi)發(fā)人員可以使用一組類(lèi)似的過(guò)濾器,并在不同的情況下進(jìn)行全組的重用。 采用這種設(shè)計(jì)模式也會(huì)帶來(lái)一定的問(wèn)題,即在過(guò)濾器之間共享信息將變得非常困難,這是由于根據(jù)其定義和需求,每個(gè)過(guò)濾器的設(shè)計(jì)和開(kāi)發(fā)都大相徑庭。因而如果在不同的過(guò)濾器之間需要共享信息的話,其代價(jià)將是非常昂貴的。模式與J2EE建立于Java編程語(yǔ)言和Java技術(shù)基礎(chǔ)之上的J2EE平臺(tái)是最適用于企業(yè)級(jí)分布式環(huán)境的應(yīng)用結(jié)構(gòu),它被設(shè)計(jì)為面向多層體系的結(jié)構(gòu)。J2EE包含下面關(guān)鍵技術(shù):Java服務(wù)器頁(yè)面(Java Service Page,JSP)、Servlet、Enterprise JavaBeans(EJB)組件、Java消息服務(wù)(Java Message Service,JMS)、JDBC和Java命名與目錄接口(Java Naming and Directory Interface,JNDI)。由于J2EE平臺(tái)是分層系統(tǒng),所以我們將J2EE的層次模型化,這個(gè)模型使得我們將職責(zé)邏輯地分到不同的層中,共分了五個(gè)層次:客戶(hù)層、表示層、業(yè)務(wù)層、集成層和資源層。因?yàn)榭蛻?hù)層和資源層并不是J2EE平臺(tái)直接關(guān)注的問(wèn)題,所以后面介紹的15個(gè)J2EE應(yīng)用模式全部屬于上面五層中的中間三層,其中表示層模式包含與Servlet和JSP技術(shù)相關(guān)的模式、業(yè)務(wù)層模式包含與EJB技術(shù)有關(guān)的模式、集成層模式包含與JMS和JDBC有關(guān)的模式。具體模式可參看下面表格:表一:表示層模式 模式名簡(jiǎn)單描述截取過(guò)濾器(Intercepting Filter)促進(jìn)請(qǐng)求的預(yù)先處理和后處理前端控制器(Front Controller)提供請(qǐng)求處理的集中控制器視圖助手(View Helper)把與表示層格式化無(wú)關(guān)的邏輯封裝到助手組件復(fù)合視圖(Composite View)從原子的子組件創(chuàng)建一個(gè)聚集視圖工作者服務(wù)(Service To Worker)合并分發(fā)者組件、前端控制器和視圖助手模式分發(fā)者視圖(Dispatcher View)合并分發(fā)者組件、前端控制器和視圖助手模式,把許多動(dòng)作推遲到視圖處理表二:業(yè)務(wù)層模式模式名簡(jiǎn)單描述業(yè)務(wù)委托(Business Delegate)把表示層和服務(wù)層分隔開(kāi),并且提供服務(wù)的外觀和代理接口值對(duì)象(Value Object)通過(guò)減少網(wǎng)絡(luò)對(duì)話,以加速層之間的數(shù)據(jù)交換會(huì)話外觀(Session Facade)隱藏業(yè)務(wù)對(duì)象復(fù)性,集中化工作流處理復(fù)合實(shí)體(Composite Entity)通過(guò)把參數(shù)相關(guān)的對(duì)象分組進(jìn)單個(gè)實(shí)體bean,表示設(shè)計(jì)粗粒度實(shí)體bean的最好經(jīng)驗(yàn)值對(duì)象組裝器(Value Object Assembler)把來(lái)自多個(gè)數(shù)據(jù)源的值對(duì)象組裝成一個(gè)復(fù)合值對(duì)象值列表處理器(Value List Handler)管理查詢(xún)執(zhí)行、結(jié)果緩沖、以及結(jié)果處理服務(wù)定位器(Service Locator)封裝業(yè)務(wù)服務(wù)查找和創(chuàng)建的復(fù)雜性,定位業(yè)務(wù)服務(wù)工廠表三:集成層模式模式名簡(jiǎn)單描述數(shù)據(jù)訪問(wèn)對(duì)象(Data Access Object)抽象數(shù)據(jù)源,提供對(duì)數(shù)據(jù)的透明訪問(wèn)服務(wù)激發(fā)器(Service Activator)加速EJB組件的異步處理 由于J2EE模式眾多,篇幅有限,這里只概要介紹其中的一種應(yīng)用模式 集成層的數(shù)據(jù)訪問(wèn)對(duì)象(DAO)模式,有興趣的讀者可以參看下面參考文獻(xiàn)中的資料。數(shù)據(jù)訪問(wèn)對(duì)象模式數(shù)據(jù)訪問(wèn)對(duì)象模式問(wèn)題 根據(jù)數(shù)據(jù)源不同,數(shù)據(jù)訪問(wèn)也不同。根據(jù)存儲(chǔ)的類(lèi)型(關(guān)系數(shù)據(jù)庫(kù)、面向?qū)ο髷?shù)據(jù)庫(kù)等)和供應(yīng)商不同,持久性存儲(chǔ)(比如數(shù)據(jù)庫(kù))的訪問(wèn)差別也很大。當(dāng)業(yè)務(wù)組件(如會(huì)話bean)或表示組件(如助手組件)需要訪問(wèn)某數(shù)據(jù)源時(shí),它們可以使用合適的API來(lái)獲得連接性,以及操作該數(shù)據(jù)源。但是在這些組件中包含連接性和數(shù)據(jù)訪問(wèn)代碼會(huì)引入這些組件及數(shù)據(jù)源實(shí)現(xiàn)之間的緊密耦合。組件中這類(lèi)代碼依賴(lài)性使應(yīng)用程序從某種數(shù)據(jù)源遷移到其它種類(lèi)的數(shù)據(jù)源將變得非常麻煩和困難,當(dāng)數(shù)據(jù)源變化時(shí),組件也需要改變,以便于能夠處理新類(lèi)型的數(shù)據(jù)源。解決方案 使用數(shù)據(jù)訪問(wèn)對(duì)象(DAO)來(lái)抽象和封裝所有對(duì)數(shù)據(jù)源的訪問(wèn)。DAO管理著與數(shù)據(jù)源的連接以便于檢索和存儲(chǔ)數(shù)據(jù),DAO實(shí)現(xiàn)了用來(lái)操作數(shù)據(jù)源的訪問(wèn)機(jī)制。依賴(lài)于DAO的業(yè)務(wù)組件為其客戶(hù)端使用DAO提供了更簡(jiǎn)單的接口,DAO完全向客戶(hù)端隱藏了數(shù)據(jù)源實(shí)現(xiàn)細(xì)節(jié)。由于當(dāng)?shù)蛯訑?shù)據(jù)源實(shí)現(xiàn)變化時(shí),DAO向客戶(hù)端提供的接口不會(huì)變化,所以該模式允許DAO調(diào)整到不同的存儲(chǔ)模式,而不會(huì)影響其客戶(hù)端或業(yè)務(wù)組件。重要的是,DAO充當(dāng)組件和數(shù)據(jù)源之間的適配器。實(shí)現(xiàn)策略 通過(guò)調(diào)整抽象工廠(Abstract Factory)模式和工廠方法(Factory Method,這二個(gè)創(chuàng)建型模式的實(shí)現(xiàn)詳情可參看GoF的設(shè)計(jì)模式一書(shū))模式,DAO模式可以達(dá)到很高的靈活度。 當(dāng)?shù)蛯哟鎯?chǔ)不會(huì)隨著實(shí)現(xiàn)變化而變化時(shí),可以使用工廠方法模式來(lái)實(shí)現(xiàn)該策略,以產(chǎn)生應(yīng)用程序需要的大量DAO,如下面類(lèi)圖1所示。 當(dāng)?shù)蛯哟鎯?chǔ)隨著實(shí)現(xiàn)的變化而變化時(shí),策略可以通過(guò)使用抽象工廠模式而實(shí)現(xiàn)。抽象工廠可以基于工廠方法實(shí)現(xiàn)而創(chuàng)建,并可使用工廠方法實(shí)現(xiàn),該策略提供一個(gè)DAO的抽象工廠對(duì)象,其中該對(duì)象可以構(gòu)造多種類(lèi)型的具體的DAO工廠,每個(gè)工廠支持一種不同類(lèi)型的持久性存儲(chǔ)實(shí)現(xiàn)。一旦你獲取某特定實(shí)現(xiàn)的具體DAO工廠,你可以使用它來(lái)生成該實(shí)現(xiàn)中所支持和實(shí)現(xiàn)的DAO,如下面類(lèi)圖2所示。應(yīng)用 當(dāng)數(shù)據(jù)訪問(wèn)代碼被直接嵌入到有其他不相關(guān)職責(zé)的某類(lèi)中時(shí),就會(huì)使修改變的十分困難。這時(shí)可以采用分離數(shù)據(jù)訪問(wèn)代碼的解決方案,將數(shù)據(jù)訪問(wèn)代碼抽取到一個(gè)新類(lèi)中,并且把該新類(lèi)邏輯或者物理地移動(dòng)到離數(shù)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1