コアJ2EEパターン - Data Access Objectパターン
2008/07/13 21:34Update
Data Access Object(データ・アクセス・オブジェクト)パターンは コアJ2EEパターン の一つであり、データベースなどの永続性データへのアクセスをDAOと呼ばれるオブジェクトで一元管理する手法を提供します。
本文は「問題」、「解決策」、「戦略」、「メリット」、「実装例」などからData Access Objectパターンについて説明します。
多くのJ2EEアプリケーションでは、永続的なデータをアクセスする必要があります。これらの永続的なデータには リレーショナルデータベース(RDBMS)、オブジェクト指向データベース(OODB)、ファイルシステム、XMLやLDAPなど様々な種類があります。また、アクセス元のコンポーネントも様々です、例えば、Entity BeanやSession Bean、JSPのView Helper、他のJavaオブジェクトなどがあります。
デザインが不適切な多くのJ2EEアプリケーションでは、永続的なデータをアクセスするためのコードを、各コンポーネントに散在してしまい、その結果
◇ 永続的なデータへの依存。各コンポーネントは、永続的なデータのAPI実装戦略に依存してしまいます。結果として、複数の永続的なデータをサポートするには、非常に困難であり、変更にもほぼ不可能になります。
◇ 重複コード。重複コードが発生してしまいます。
◇ 複雑化。永続的なデータへのアクセスは、統一したインタフェースがなく、使いづらくなります。
Data Access Objectパターンはこれらの問題を解決します。
Use a Data Access Object (DAO) to abstract and encapsulate all access to the data source. The DAO manages the connection with the data source to obtain and store data.
データソースへのアクセスをData Access Object (DAO)によって抽象化及びカプセル化します。DAOクラスはデータソースへの接続やデータの保存などを管理します。
Data Access Objectパターンは永続的なデータへのアクセスをカプセル化し、抽象・統一したインタフェースを提供することで、永続的なデータの具体的な実装を隠蔽します。
<<Data Access Objectの構造図>>

Client(Business Object)
データソースをアクセスする元のコンポーネント。Session Bean、Entity Bean、JSPのView Helper、その他Java Objectなどが該当します。
DataAccessObject
データソースへのアクセスを抽象化・カプセル化するクラス。DAOを利用することで、ビジネスオブジェクトはデータソースを透過的に扱うことが可能になります。
DataSource
データソース。リレーショナルデータベース(RDBMS)、オブジェクト指向データベース(OODB)、ファイルシステム、XMLやLDAPなどが該当します。
Data(Transfer Object)
データ。データソースによって提供されたデータをビジネスオブジェクトに利用します。
◇ データソースの隠蔽。統一したインタフェースを提供することで、ビジネスオブジェクトはデータソースを透過的に扱うことができます。
◇ 複数のデータソースをサポートすることが可能になります。
◇ 簡素化。ビジネスオブジェクトは、統一したインタフェースを利用して簡単にデータソースを利用可能になります。
◇ データソースへのアクセスの集中管理。
Data Access Objectパターンには、様々な実装戦略があります。
◇ ツールで自動生成
◇ Abstract Factoryパターン「GoF」
◇ Factory Methodパターン「GoF」
◇ DAOにキャッシュやアクセス権限処理などの共通する処理
<<本文末の参考資料をご参考ください>>
Transfer Objectパターン
Transfer Objectパターンを利用して層間のデータ送受信ができます。
Factory Method パターン[GoF] 及び Abstract Factory パターン[GoF]
Data Access ObjectパターンはFactory Method パターン[GoF] もしくは Abstract Factory パターン[GoF]によって実装することができます。
Broker [POSA1]
Data Access Objectはビジネスオブジェクトとデータソースの間の高結合度を打破します。
Core J2EE Pattern Catalog 
Core J2EE Patterns - Data Access Object
問題
多くのJ2EEアプリケーションでは、永続的なデータをアクセスする必要があります。これらの永続的なデータには リレーショナルデータベース(RDBMS)、オブジェクト指向データベース(OODB)、ファイルシステム、XMLやLDAPなど様々な種類があります。また、アクセス元のコンポーネントも様々です、例えば、Entity BeanやSession Bean、JSPのView Helper、他のJavaオブジェクトなどがあります。
デザインが不適切な多くのJ2EEアプリケーションでは、永続的なデータをアクセスするためのコードを、各コンポーネントに散在してしまい、その結果
◇ 永続的なデータへの依存。各コンポーネントは、永続的なデータのAPI実装戦略に依存してしまいます。結果として、複数の永続的なデータをサポートするには、非常に困難であり、変更にもほぼ不可能になります。
◇ 重複コード。重複コードが発生してしまいます。
◇ 複雑化。永続的なデータへのアクセスは、統一したインタフェースがなく、使いづらくなります。
Data Access Objectパターンはこれらの問題を解決します。
解決策
Use a Data Access Object (DAO) to abstract and encapsulate all access to the data source. The DAO manages the connection with the data source to obtain and store data.
データソースへのアクセスをData Access Object (DAO)によって抽象化及びカプセル化します。DAOクラスはデータソースへの接続やデータの保存などを管理します。
Data Access Objectパターンは永続的なデータへのアクセスをカプセル化し、抽象・統一したインタフェースを提供することで、永続的なデータの具体的な実装を隠蔽します。
<<Data Access Objectの構造図>>
Client(Business Object)
データソースをアクセスする元のコンポーネント。Session Bean、Entity Bean、JSPのView Helper、その他Java Objectなどが該当します。
DataAccessObject
データソースへのアクセスを抽象化・カプセル化するクラス。DAOを利用することで、ビジネスオブジェクトはデータソースを透過的に扱うことが可能になります。
DataSource
データソース。リレーショナルデータベース(RDBMS)、オブジェクト指向データベース(OODB)、ファイルシステム、XMLやLDAPなどが該当します。
Data(Transfer Object)
データ。データソースによって提供されたデータをビジネスオブジェクトに利用します。
メリット
◇ データソースの隠蔽。統一したインタフェースを提供することで、ビジネスオブジェクトはデータソースを透過的に扱うことができます。
◇ 複数のデータソースをサポートすることが可能になります。
◇ 簡素化。ビジネスオブジェクトは、統一したインタフェースを利用して簡単にデータソースを利用可能になります。
◇ データソースへのアクセスの集中管理。
戦略
Data Access Objectパターンには、様々な実装戦略があります。
◇ ツールで自動生成
◇ Abstract Factoryパターン「GoF」
◇ Factory Methodパターン「GoF」
◇ DAOにキャッシュやアクセス権限処理などの共通する処理
実装例
<<本文末の参考資料をご参考ください>>
関連パターン
Transfer Objectパターン
Transfer Objectパターンを利用して層間のデータ送受信ができます。
Factory Method パターン[GoF] 及び Abstract Factory パターン[GoF]
Data Access ObjectパターンはFactory Method パターン[GoF] もしくは Abstract Factory パターン[GoF]によって実装することができます。
Broker [POSA1]
Data Access Objectはビジネスオブジェクトとデータソースの間の高結合度を打破します。
その他参考資料
Core J2EE Pattern Catalog 
Core J2EE Patterns - Data Access Object
Sponsored Link
- Relative Articles
- オブジェクト指向設計の原則 概要 - (2008/07/21 22:03)
- ASP.NETでのフロント・コントローラ(Front Controller)実装 - (2009/10/20 15:22)
- Factory Method パターン - ファクトリメソッドパターン - (2008/06/09 22:44)
- Abstract Factory パターン - 抽象ファクトリパターン - (2008/06/10 13:25)
- Singleton パターン - シングルトンパターン - (2008/06/10 15:36)
- Prototypeパターン - プロトタイプパターン - (2008/06/10 17:23)
- Builderパターン - ビルダーパターン - (2008/06/10 19:01)
- Adapter パターン - アダプターパターン - (2008/06/11 11:30)
- Composite パターン - コンポジットパターン - (2008/06/11 16:59)
- Interpreter パターン - インタプリタパターン - (2008/06/13 15:42)