リポジトリパターンの調査中に読んだ内容に混乱しました。人々が単にデータアクセス層を意味するときにその単語を(誤って?)使用しているのではないかと思います。
デザインパターン(GoF)のインデックスに「リポジトリ」が見つからないため、エンタープライズアプリケーションアーキテクチャのパターン(Fowler)に目を向けました。ファウラーは、クライアントが基準オブジェクトを作成し、それをリポジトリに渡して結果を取得すると述べたとき、かなり明確に見えます(323ページ) 。これは次のようになります。
public class Person
{
public List<Person> Dependents()
{
Repository repository = Registry.personRepository();
Criteria criteria = new Criteria();
criteria.equal(Person.BENEFACTOR, this);
return repository.matching(criteria);
}
}
基準オブジェクトは、リポジトリをリポジトリにするものですか?そうでない場合はどうしますか?永続性メカニズムを抽象化する(したがってクエリを構築する)ことが目標である場合、リポジトリは次のような単純なDAL/ORM呼び出しとどのように異なりますか。
public class PersonLogic
{
public List<Person> GetDependents()
{
IPersonData personData = DependencyContainer.Resolve<IPersonData>();
return personData.GetDependents();
}
}
私には、違いは次のようになります。
*リポジトリパターンを使用すると、クライアントはさまざまな基準オブジェクトを作成し、その上でMatching()メソッドを呼び出します。
*シンプルなDALを使用すると、クライアントは必要なものに基づいてさまざまなメソッドを呼び出すだけです。
これ以上のものはありますか?プログラマーは、実際にDALを意味するのに、誤って「リポジトリ」という用語を使用していますか?
編集
David Osborneは、このリンクをPersistencePatternsに送信しました。それは述べています:
基本的に、リポジトリパターンとは、永続化システムにファサードを配置することを意味します。これにより、残りのアプリケーションコードを、永続化がどのように機能するかを知る必要がなくなります。
それが実際のデータアクセス層です。リポジトリとDALは同じものであり、「真の」リポジトリは基準オブジェクトを使用しているように見えます。