レポジトリ
エドワード・ヒーアット、ロブ・ミー著
ドメインオブジェクトにアクセスするためのコレクションライクなインターフェースを使用して、ドメインとデータマッピングレイヤーの間を媒介します。
完全な説明は、EAAのPページ322をご覧ください。
複雑なドメインモデルを持つシステムでは、データマッパー(165)によって提供されるようなレイヤーから恩恵を受けることがよくあります。このレイヤーは、ドメインオブジェクトをデータベースアクセスコードの詳細から分離します。そのようなシステムでは、クエリ構築コードが集約されているマッピングレイヤーの上に別の抽象化レイヤーを構築する価値があります。これは、ドメインクラスが多数ある場合やクエリが大量にある場合にさらに重要になります。特にこのような場合、このレイヤーを追加すると、重複するクエリロジックを最小限に抑えることができます。
レポジトリは、ドメインとデータマッピングレイヤーの間を媒介し、メモリ内のドメインオブジェクトコレクションのように動作します。クライアントオブジェクトはクエリ仕様を宣言的に構築し、それをレポジトリに送信して解決します。オブジェクトは、単純なオブジェクトのコレクションから追加したり削除したりでき、レポジトリによってカプセル化されたマッピングコードは、バックグラウンドで適切な操作を実行します。概念的には、レポジトリはデータストアに永続化されたオブジェクトのセットとそれに対する操作をカプセル化し、永続化レイヤーのよりオブジェクト指向的なビューを提供します。レポジトリは、ドメインとデータマッピングレイヤーとの明確な分離と一方向の依存関係を実現するという目的もサポートします。
このパターンの優れた説明はドメイン駆動設計にもあります。