摘要:J2EE模型提供了一個很好的企業(yè)應用框架及解決方法,提供了靈活的技術選擇,由于所有的J2EE應用都需要訪問持久性數據資源,因此實現和封裝J2EE數據訪問層越來越成為構建穩(wěn)定、健壯和靈活的J2EE應用的基礎。論文重點介紹了如何使用DAO模式來解決數據訪問客戶端對持久性存儲的問題,并給出了一種解決DAO模式對象類型依賴問題的方法。
關鍵詞:數據訪問對象(DAO); J2EE; Enterprise JavaBean (EJB)
1引言
隨著軟件系統(tǒng)的規(guī)模和復雜性的增加,人們希望將設計模式的思想應用于基于J2EE的企業(yè)信息化系統(tǒng)中,使開發(fā)者減少在J2EE平臺開發(fā)過程中的重復投資,這樣不僅會大幅度的減少開發(fā)的工作量,也會為以后整個系統(tǒng)的維護和升級打下一個堅實的基礎。本文主要介紹設計模式和其中的DAO(數據訪問對象)模式的概念及功能,探討DAO模式在哈爾濱塑料五廠企業(yè)信息化系統(tǒng)中的應用。
2設計模式概述
設計模式是指情景中標準設計問題的重復性解決方案,它關注的是特定設計問題及其解決方案。在每種模式中均描述一個設計問題和一個通用的經過驗證的解決方案。這個解決方案是對反復出現的設計結構進行識別和抽象得到的,它通常由多個類組成。在軟件系統(tǒng)的設計中,設計模式使代碼編寫真正工程化,為軟件系統(tǒng)的設計帶來諸多好處。
3 DAO設計模式
J2EE平臺是開發(fā)和運行企業(yè)級Web應用的標準,可以用于開發(fā)大型的、多層次的以及分布式的企業(yè)級Web應用系統(tǒng)。J2EE技術為組件開發(fā)提供了廣泛的支持,同時也提供了豐富的開發(fā)工具和服務,便于開發(fā)模塊化的,可重用的業(yè)務邏輯。
EJB (企業(yè)級Java Bean)的設計是J2EE應用設計中的核心模塊。目前,EJB的設計模式有幾十種,如何選擇適合自己項目的模式是EJB設計的關鍵問題,也是最難解決的問題。
3.1 DAO模式介紹
DAO簡單的說就是對持久化層的訪問路徑,客戶端得到一個DAO對象,由DAO對象訪問數據源,數據源創(chuàng)建結果集并將它返回給DAO對象,DAO對象根據結果集創(chuàng)造出數據對象并返回客戶端。這些元素之間的動態(tài)協(xié)作過程是由該模式以下幾部分完成的:
DAO (DataAccessObject)是該模式的主要對象,它封裝了底層數據訪問實現,以保證對數據源的透明訪問。用戶可以把數據加載和存儲操作委托給數據庫訪問對象。
數據源(DataSource)代表數據源實現。數據源可以是RDBMS, OODBMS,XM L資料庫、純文件系統(tǒng)等等。
結果集(ResultSet)是DAO對象訪問數據源得到的結果的集合,DAO可以用結果集包裝成數據對象。
客戶端(Client)使用數據對象進行商業(yè)邏輯。
數據對象(Data Object)是數據以對象的形式描述。它由DAO對象創(chuàng)建,然后給客戶端進行商業(yè)邏輯運算。
3.2 DAO模式的優(yōu)點
對持久化數據的訪問有良好的透明性,業(yè)務對象可以在不知道數據源實現細節(jié)的情況下訪問數據。由于一切數據訪問細節(jié)被數據訪問對象所隱藏,所以這種訪問過程是透明的。
數據庫有良好的可移植性。在應用系統(tǒng)中添加數據訪問對象,可以使得應用系統(tǒng)能夠很方便地移植到另外一種數據庫實現上。由于業(yè)務對象與數據實現是隔離的,所以在移植過程中,僅僅對數據訪問對象進行一些變化即可。
可以減少業(yè)務對象的代碼復雜度。由于數據訪問對象可以管理所有的數據訪問細節(jié),這就簡化了業(yè)務模塊和其它數據客戶的代碼,同時也提高了應用系統(tǒng)的整體可讀性和開發(fā)效率。
可以對數據訪問進行集中處理。由于所有的數據訪問操作都移交給數據訪問對象,這樣應用系統(tǒng)其它部分就與數據訪問隔離開來,而全部相關操作都由數據訪問對象集中處理,這樣也使得相關操作更加容易被維護和管理。
為了進一步說明DAO模式的優(yōu)勢,下面以一個企業(yè)信息化系統(tǒng)為例,介紹如何在具體的項目中運用DAO模式。
3.3 DAO模式的應用
哈工大塑料五廠的企業(yè)信息化系統(tǒng)包括成本查詢模塊、生產管理模塊、系統(tǒng)定義模塊、OA管理模塊、客戶關系管理模塊,現在以生產管理模塊來說明DAO模式的應用。
生產管理模塊的流程是:用戶首先要根據銷售計劃查看庫存情況,然后制定生產計劃,交由生產經理審批,批準后由研發(fā)部確定最佳的工藝參數,編制作業(yè)指導書,再交由生產經理審批并實施以保證產品質量。如果生產過程中條件發(fā)生變化,要重新進行以上流程。
Client是客戶端,可以訪問數據源以存取數據。DataAccessObject對Client隱藏了底層的數據訪問細節(jié),使Client能透明地訪問數據源,實現創(chuàng)建、查找、更新和刪除等操作。DataSource代表JDBC數據源的實現。Data代表一個傳輸對象,它被用作數據的載體,DAO可以將數據返回給客戶端,也可以從客戶端那里接收傳輸對象形式的數據,并用這些數據對數據源進行更新。ResultSet代表一次查詢操作的結果。
用戶進入生產管理子系統(tǒng)后,通過ResultSet返回的結果集查看庫存情況,再對照銷售計劃制定生產計劃,DataAccessObject提供在數據庫中創(chuàng)建、查找、更新和刪除Data的操作,不對任何查詢操作進行緩存,因此不會出現線程或同步問題的干擾,而且DAO將數據源的實現細節(jié)完全隱藏起來,不必擔心數據源對使用者的接口的影響。當應用程序使用JDBC作為持久化手段時,DAO將所有對JDBC的使用都封裝在數據訪問層內部,不會向數據訪問層之外的客戶端暴露任何屬于java.sql.*或java.x.sql.*包的異常。因此,數據訪問及操作的邏輯被封裝在了一個單獨的層次中,起到了把中間層分為兩部分的作用。
結束語
DAO模式是一種讓很多開發(fā)者都受益匪淺的功能強大的EJB設計模式。實踐證明,在EJB的設計中,適當的使用DAO模式,不但可以使代碼可重用性、可拓展性增強,而且還能夠提高效率。當然,DAO模式并不是在所有的項目中都適用,如果使用不當,反而會造成系統(tǒng)性能的下降。比如,設計該模式時增加額外的類會提高應用程序的復雜度,對于容器管理的持久性不能利用,降低了開發(fā)效率。因此,DAO模式在許多方面還需要我們進一步探討、改進和擴展。
參考文獻
[1] Deepak Alur,John Crupi,Dan Malks.Core J2EE Paterns:Best Practices and Design Strategies[M].Second Edition,Prentice Hall ,2003:10-233.
[2] Ted Husted, Cedric Dumoulin, Georgeranciscus.Struts in action[M].Manning Publications Co,2003:56-60.
[3] 鄭人杰,殷人昆,陶永雷.實用軟件工程[M].北京:清華大學出版社,1997:45-48。
[4] 泰勒(美),李東升.JDBC數據庫編程與J2EE[M].北京:電子工業(yè)出版社,2004:23-67。