乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      模式與J2EE

       bluecrystal 2006-06-25

          信息工程是以當前數(shù)據(jù)系統(tǒng)為基礎(chǔ),在一個企業(yè)或企業(yè)的主要部門,關(guān)于建設(shè)信息系統(tǒng)的規(guī) 劃、分析、設(shè)計和構(gòu)成的一整套相互關(guān)聯(lián)的正規(guī)化、自動化的技術(shù)應(yīng)用。

      --- James Martin 

          正如上面信息工程的創(chuàng)始人James Martin為信息工程的概念所做定義類似,模式(Patterns)的創(chuàng)始人建筑師Christopher Alexander在<模式語言,1977、1979>一書中對模式的概念進行了如下描述(附注:書名后面的年份代表在各個不同時期的作品,下面形式同上):每一個模式描述了一個在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次的使用該解決方案而不必做重復(fù)勞動。每個模式是由三部分組成的一個規(guī)則,這個規(guī)則描述特定環(huán)境、問題和解決方案之間的關(guān)系。簡單的說,沒有一個模式是獨立的實體,每個模式都存在著相互支持,但支持的程度不同:大的模式可以內(nèi)嵌小的模式,同等層次的模式并列存在,而小的模式被嵌入到大的模式之中。 :
      --- Christopher Alexander  

          模式的概念在軟件行業(yè)被采用以后,得到的廣泛的發(fā)展,現(xiàn)在已經(jīng)存在許多種類型的模式應(yīng)用,其中比較有名的箸作有:GoF(Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人,簡稱:Gang of Four[GoF])的<設(shè)計模式,1995>,Martin Fowler的<分析模式,1997>,F(xiàn)rank Buschmann等人的<體系結(jié)構(gòu)模式,1996、2000>、Jim O.Coplien、Niel Harrison等人的<編程模式,1995、1996、1998、1999>和Deepak Alur等人的<J2EE核心模式,2001>等,其中最具影響的是GoF的<設(shè)計模式>一書,書中詳細討論了三種類型,共23種模式。好的設(shè)計源于工作中經(jīng)驗的積累,當設(shè)計使用標準的模板以模式的方式進行交流時,模式就成了交流和重用的強大機制,并且可以改善設(shè)計和開發(fā)軟件的方式。模式可以幫助我們在一個特定的環(huán)境里整理并記錄已知的可重現(xiàn)的問題及解決方案,并且通過模式來與他人交流這些知識,這些模式可以解決在不同環(huán)境中重復(fù)出現(xiàn)的問題。模式可以使設(shè)計重復(fù)使用,重復(fù)使用已知的解決方案可以縮短設(shè)計和開發(fā)應(yīng)用的周期,有效的使用模式,可以使我們遠離重復(fù)投資的怪圈。模式的關(guān)鍵在于簡單性和可重現(xiàn)性。
          舉一個模式應(yīng)用的簡單示例。例如,在你的便攜式電腦上運行一個進程中的對象,并且這些對象需要和運行在另一進程中的別的對象通信,也許這一進程并不在你的便攜式電腦上,而在別的地方。你又不想讓系統(tǒng)中的對象擔心如何找尋網(wǎng)上的其他對象或者執(zhí)行遠程過程調(diào)用。這時,可以使用代理(Proxy模式,詳見GoF的<設(shè)計模式>一書)模式來解決這個問題,你能做的事就是為這個遠程對象在你的本地過程中建立一個代理對象,該代理對象和遠程對象具有相同的接口。你的本地對象利用通常處理過程中的消息發(fā)送來和代理交談。這時代理對象負責把消息傳送給實在對象,而不管實在對象位于何處。
          由于下面要講的Java 2平臺的企業(yè)版(J2EE)應(yīng)用模式中很多用到了設(shè)計模式與重構(gòu)(Refactoring)的概念,所以在此有必要再概要介紹一下重構(gòu)的概念。重構(gòu)已經(jīng)被證明可以阻止軟件的腐朽和衰敗,關(guān)于重構(gòu)方面的有名箸作當然首推是Martin Fowler所寫的<重構(gòu),1999>一書了,書中詳細介紹了重構(gòu)的七大類型,共70余種具體的重構(gòu)手法,同時也指出測試機制在重構(gòu)中的重要性。書中Martin Fowler對重構(gòu)的概念進行了詳細說明:
          重構(gòu)是對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,目地是在不改變[軟件之可察行為]的前提下,提高其可理解性,降低其修改成本。重構(gòu)是一種有紀律的、經(jīng)過訓(xùn)練的、有條不紊的程序整理方法,可以將整理過程中不小心引入的錯誤的機率降到最低,本質(zhì)上說,重構(gòu)就是在代碼寫好之后改進它的設(shè)計。重構(gòu)之前,首先檢查自己是否有一套可靠的測試機制,這些測試必須有我檢驗?zāi)芰Α?br>

      --- Martin Fowler 

          建立于Java編程語言和Java技術(shù)基礎(chǔ)之上的J2EE平臺是最適用于企業(yè)級分布式環(huán)境的應(yīng)用結(jié)構(gòu),它被設(shè)計為面向多層體系的結(jié)構(gòu)。J2EE包含下面關(guān)鍵技術(shù):Java服務(wù)器頁面(Java Service Page,JSP)、Servlet、Enterprise JavaBeans(EJB)組件、Java消息服務(wù)(Java Message Service,JMS)、JDBC和Java命名與目錄接口(Java Naming and Directory Interface,JNDI)。由于J2EE平臺是分層系統(tǒng),所以我們將J2EE的層次模型化,這個模型使得我們將職責邏輯地分到不同的層中,共分了五個層次:客戶層、表示層、業(yè)務(wù)層、集成層和資源層。因為客戶層和資源層并不是J2EE平臺直接關(guān)注的問題,所以后面介紹的15個J2EE應(yīng)用模式全部屬于上面五層中的中間三層,其中表示層模式包含與Servlet和JSP技術(shù)相關(guān)的模式、業(yè)務(wù)層模式包含與EJB技術(shù)有關(guān)的模式、集成層模式包含與JMS和JDBC有關(guān)的模式。具體模式可參看下面表格:

      表一:表示層模式
      模式名 簡單描述
      截取過濾器(Intercepting Filter) 促進請求的預(yù)先處理和后處理
      前端控制器(Front Controller) 提供請求處理的集中控制器
      視圖助手(View Helper) 把與表示層格式化無關(guān)的邏輯封裝到助手組件
      復(fù)合視圖(Composite View) 從原子的子組件創(chuàng)建一個聚集視圖
      工作者服務(wù)(Service To Worker) 合并分發(fā)者組件、前端控制器和視圖助手模式
      分發(fā)者視圖(Dispatcher View) 合并分發(fā)者組件、前端控制器和視圖助手模式,把許多動作推遲到視圖處理


      表二:業(yè)務(wù)層模式
      模式名 簡單描述
      業(yè)務(wù)委托(Business Delegate) 把表示層和服務(wù)層分隔開,并且提供服務(wù)的外觀和代理接口
      值對象(Value Object) 通過減少網(wǎng)絡(luò)對話,以加速層之間的數(shù)據(jù)交換
      會話外觀(Session Facade) 隱藏業(yè)務(wù)對象復(fù)性,集中化工作流處理
      復(fù)合實體(Composite Entity) 通過把參數(shù)相關(guān)的對象分組進單個實體bean,表示設(shè)計粗粒度實體bean的最好經(jīng)驗
      值對象組裝器(Value Object Assembler) 把來自多個數(shù)據(jù)源的值對象組裝成一個復(fù)合值對象
      值列表處理器(Value List Handler) 管理查詢執(zhí)行、結(jié)果緩沖、以及結(jié)果處理
      服務(wù)定位器(Service Locator) 封裝業(yè)務(wù)服務(wù)查找和創(chuàng)建的復(fù)雜性,定位業(yè)務(wù)服務(wù)工廠


      表三:集成層模式
      模式名 簡單描述
      數(shù)據(jù)訪問對象(Data Access Object) 抽象數(shù)據(jù)源,提供對數(shù)據(jù)的透明訪問
      服務(wù)激發(fā)器(Service Activator) 加速EJB組件的異步處理

          由于J2EE模式眾多,篇幅有限,這里只概要介紹其中的一種應(yīng)用模式 - 集成層的數(shù)據(jù)訪問對象(DAO)模式,有興趣的讀者可以參看下面參考文獻中的資料。
      數(shù)據(jù)訪問對象模式

      數(shù)據(jù)訪問對象模式

      1、問題

          根據(jù)數(shù)據(jù)源不同,數(shù)據(jù)訪問也不同。根據(jù)存儲的類型(關(guān)系數(shù)據(jù)庫、面向?qū)ο髷?shù)據(jù)庫等)和供應(yīng)商不同,持久性存儲(比如數(shù)據(jù)庫)的訪問差別也很大。當業(yè)務(wù)組件(如會話bean)或表示組件(如助手組件)需要訪問某數(shù)據(jù)源時,它們可以使用合適的API來獲得連接性,以及操作該數(shù)據(jù)源。但是在這些組件中包含連接性和數(shù)據(jù)訪問代碼會引入這些組件及數(shù)據(jù)源實現(xiàn)之間的緊密耦合。組件中這類代碼依賴性使應(yīng)用程序從某種數(shù)據(jù)源遷移到其它種類的數(shù)據(jù)源將變得非常麻煩和困難,當數(shù)據(jù)源變化時,組件也需要改變,以便于能夠處理新類型的數(shù)據(jù)源。

      2、解決方案

          使用數(shù)據(jù)訪問對象(DAO)來抽象和封裝所有對數(shù)據(jù)源的訪問。DAO管理著與數(shù)據(jù)源的連接以便于檢索和存儲數(shù)據(jù),DAO實現(xiàn)了用來操作數(shù)據(jù)源的訪問機制。依賴于DAO的業(yè)務(wù)組件為其客戶端使用DAO提供了更簡單的接口,DAO完全向客戶端隱藏了數(shù)據(jù)源實現(xiàn)細節(jié)。由于當?shù)蛯訑?shù)據(jù)源實現(xiàn)變化時,DAO向客戶端提供的接口不會變化,所以該模式允許DAO調(diào)整到不同的存儲模式,而不會影響其客戶端或業(yè)務(wù)組件。重要的是,DAO充當組件和數(shù)據(jù)源之間的適配器。

      3、實現(xiàn)策略
          通過調(diào)整抽象工廠(Abstract Factory)模式和工廠方法(Factory Method,這二個創(chuàng)建型模式的實現(xiàn)詳情可參看GoF的<設(shè)計模式>一書)模式,DAO模式可以達到很高的靈活度。

      • 當?shù)蛯哟鎯Σ粫S著實現(xiàn)變化而變化時,可以使用工廠方法模式來實現(xiàn)該策略,以產(chǎn)生應(yīng)用程序需要的大量DAO,如下面類圖1所示。
      • 當?shù)蛯哟鎯﹄S著實現(xiàn)的變化而變化時,策略可以通過使用抽象工廠模式而實現(xiàn)。抽象工廠可以基于工廠方法實現(xiàn)而創(chuàng)建,并可使用工廠方法實現(xiàn),該策略提供一個DAO的抽象工廠對象,其中該對象可以構(gòu)造多種類型的具體的DAO工廠,每個工廠支持一種不同類型的持久性存儲實現(xiàn)。一旦你獲取某特定實現(xiàn)的具體DAO工廠,你可以使用它來生成該實現(xiàn)中所支持和實現(xiàn)的DAO,如下面類圖2所示。



      4、應(yīng)用
          當數(shù)據(jù)訪問代碼被直接嵌入到有其他不相關(guān)職責的某類中時,就會使修改變的十分困難。這時可以采用分離數(shù)據(jù)訪問代碼的解決方案,將數(shù)據(jù)訪問代碼抽取到一個新類中,并且把該新類邏輯或者物理地移動到離數(shù)據(jù)源比較近的位置,這樣可以增強模塊性和可重用性,如下面圖3所示。具體作法可以使用提煉類(Extract Class,一種重構(gòu)手法,細節(jié)可參看Martin的<重構(gòu)>一書)方法創(chuàng)建一個新類,并將原來類中把數(shù)據(jù)訪問代碼移動到這個新的數(shù)據(jù)訪問對象(DAO)類,使用這個新的DAO對象從控制器類中訪問數(shù)據(jù)。
          示例:持久性邏輯被嵌入到一個使用新DAO對象管理的持久性的某企業(yè)新DAO對象中,把持久性代碼和該企業(yè)新DAO對象代碼結(jié)合起來會創(chuàng)建脆弱的、緊密耦合的代碼。當持久性代碼是該企業(yè)新DAO對象的一部分時,對該持久性存儲的任何改動都要求更改該新DAO對象的持久性代碼。這種耦合對企業(yè)新DAO對象代碼維護會帶來負面的影響。下面圖4為運用分離數(shù)據(jù)訪問對象方法對其進行重構(gòu)改進后的結(jié)果。



          在15個J2EE模式中,每個模式都作用于設(shè)計模式和構(gòu)架模式之間的某些方面。每個模式不是孤立存在的,需要其它模式的支持才能更加體現(xiàn)其含義和用處,為了最大限度的用好模式,還需要充分理解模式之間的關(guān)系。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多