DAO 學習筆記

         最近正在開發的一個項目是autotest 的web app應用。我負責開發的模塊是DAO.現在工作已經基本完成,但今天一時興起,google了一下,才發現它是一個經常使用的設計模式。在查閱了網上很多資料之後,我結合自己的開發經驗,寫了這篇學習筆記,希望能夠對大家有所幫助。

一  有關DAO模式的介紹
        DAO(Data Access Object)模式實際上是兩個模式的組合,即Data Accessor 模式和 Active Domain Object 模式,其中 Data Accessor 模式實現了數據訪問和業務邏輯的分離,而Active Domain Object 模式,其中Data Accessor模式實現了數據訪問和業務邏輯的分離,而Active Domain Object 模式實現了業務數據的對象化封裝,一般我們將這兩個模式組合使用。

        業務對象只應該關注業務邏輯,不應該關心數據存取的細節。數據訪問對象必須實現特定的持久化策略(如,基於JDBC或Hibernate的持久化邏輯), 這樣就抽出來了DAO層,作爲數據源層,而之上的Domain Model層與之通訊而已,如果將那些實現了數據訪問操作的所有細節都放入高層Domain model(領域模型)的話,系統的結構一定層次上來說就變得有些混亂。低級別的數據訪問邏輯與高級別的業務邏輯分離,用一個DAO接口隱藏持久化操作的 細節,這樣使用的最終目的就是讓業務對象無需知道底層的持久化技術知識,這是標準 j2ee 設計模式之一。一個典型的的DAO組成:DAO工廠類,DAO接口,實現DAO接口的具體類(每個 DAO 實例負責一個主要域對象或實體),VO(Value Object)。如果一個DAO 工廠只爲一個數據庫的實現(現在只考慮這種情況)而創建很多的DAO的時候,實現該策略時,我們考慮採用工廠方法設計模 式.

二  DAO模式的目標

        DAO模式通過對業務層提供數據抽象層接口,實現了以下目標:

1. 數據存儲邏輯的分離
        通過對數據訪問邏輯進行抽象,爲上層機構提供抽象化的數據訪問接口。業務層無需關心具體的select,insert,update操作,這樣, 一方面避免了業務代碼中混雜JDBC調用語句,使得業務落實實現更加清晰,另一方面,由於數據訪問幾口語數據訪問實現分離,也使得開發人員的專業劃分成爲 可能。某些精通數據庫操作技術的開發人員可以根據接口提供數據庫訪問的最優化實現,而精通業務的開發人員則可以拋開數據曾德繁瑣細節,專注於業務邏輯編 碼。

2. 數據訪問底層實現的分離
        DAO模式通過將數據訪問計劃分爲抽象曾和實現曾,從而分離了數據使用和數據 訪問的地稱實現細節。這意味着業務層與數據訪問的底層細節無關,也就是說,我們可以在保持上層機構不變得情況下,通過切換底層實現來修改數據訪問的具體機 制,常見的一個例子就是,我們可以通過僅僅替換數據訪問曾實現,將我們的系統部署在不同的數據庫平臺之上。

3. 資源管理和調度的分離
        在數據庫操作中,資源的管理和調度是一個非常值得關注的主題。大多數系統的性能瓶頸往往並非集中於業務邏輯處理本身。在系統涉及的各種資源調度過程中,往往存在着最大的性能黑洞,而數據庫作爲業務系統中最重要的系統資源,自然也成爲關注的焦點。DAO模 式將數據訪問邏輯從業務邏輯中脫離開來,使得在數據訪問層實現統一的資源調度成爲可能,通過數據庫連接池以及各種緩存機制(Statement Cache,Data Cache等,緩存的使用是高性能系統實現的一個關鍵所在)的配合使用,往往可以保持上層系統不變的情況下,大幅度提升系統性能。

4.數據抽象
        在直接基於JDBC調用的代碼中,程序員面對的數據往往是原始的RecordSet數據集,誠然這樣的數據集可以提供足夠的信息,但對於業務邏輯開發過程而言,如此瑣碎和缺乏寓意的字段型數據實在令人厭倦。
        DAO 模式通過對底層數據的封裝,爲業務曾提供一個面向對象的接口,使得業務邏輯開發員可以面向業務中的實體進行編碼。通過引入DAO模 式,業務邏輯更加清晰,且富於形象性和描述性,這將爲日後的維護帶來極大的便利。試想,在業務曾通過Customer.getName方法獲得客戶姓名, 相對於直接通過SQL語句訪問數據庫表並從ResultSet中獲得某個字符型字段而言,哪種方式更加易於業務邏輯的形象化和簡潔化?

三 DAO設計要注意的問題
        在採用這種工廠方法設計模式來實現時我們其實要注意很多問題,哪個對象負責開始事務,哪個負責事務結束?DAO 是否要負責事務的開始和結束? 應用程序是否需要通過多少個DAO訪問數據?事務涉及一個DAO還是多個DAO?一個DAO是否調用另一個DAO的方法?瞭解上述問題的答案將有助於我們 選擇最適合的 DAO 的事務界定策略。在 DAO 中有兩種主要的界定事務的策略。一種方式是讓 DAO 負責界定事務,另一種將事務界定交給調用這個 DAO 方法的對象處理。如果選擇了前一種方式,那麼就將事務代碼嵌入到 DAO 中。如果選擇後一種方式,那麼事務界定代碼就是在 DAO 類外面


以上是概念上的介紹,在下一篇筆記裏,我將用實例進行說明。


reference:
http://lincoln.javaeye.com/blog/33727
http://blog.csdn.net/lin_bei/archive/2006/08/10/1048051.aspx
http://www.phome.net/document/java/200504/java111245704413630.html
發佈了16 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章