問題背景
J2EE 應用常需存取持久化資料(資料庫、檔案等)。不同資料源的 API 差異大,若業務元件直接耦合特定資料存取代碼,遷移資料源將極其困難(如從 Oracle 遷移至 Informix 需大量重寫)。
DAO 模式結構

四大參與者:
- BusinessObject:資料客戶端,委託 DAO 存取資料。
- DataAccessObject:核心物件,封裝特定資料源存取邏輯,對外提供統一介面。
- DataSource:資料源實現(RDBMS、LDAP、XML 等)。
- ValueObject:資料傳輸載體,DAO 以此回傳或接收資料。
兩大實作策略
1. 自動代碼生成策略
- 建立 BusinessObject、DAO、資料庫表的映射關係。
- 編寫代碼生成工具或使用 ORM 工具(Hibernate、OJB、TopLink 等)自動生成 DAO 代碼。
- 工具常提供 GUI 映射、結果快取、查詢快取等增值功能。
2. DAO 工廠策略
- 資料源固定:採用工廠方法模式,單一工廠產生所有 DAO。
- 資料源多變:採用抽象工廠模式,每種資料源對應一個具體工廠,運行時動態切換。

模式效益
- 透明性:業務物件無需知曉資料源實現細節。
- 易遷移:變更資料源只需替換 DAO 實作,業務層零修改。
- 關注點分離:資料存取邏輯集中於 DAO,便於維護與測試。