23

リポジトリパターンの調査中に読んだ内容に混乱しました。人々が単にデータアクセス層を意味するときにその単語を(誤って?)使用しているのではないかと思います。

デザインパターン(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は同じものであり、「真の」リポジトリは基準オブジェクトを使用しているように見えます。

4

2 に答える 2

6

「IQueryableインターフェースの使用」セクション以降の「注文と登録の制限付きコンテキストの拡張と拡張」を参照してください。DAO/リポジトリの実装に関する洞察に満ちたバランスの取れた議論を提供します。

その後ボブホーンによって強調されたように、永続性パターンの記事はそれを要約しています:

基本的に、リポジトリパターンとは、永続化システムにファサードを配置することを意味します。これにより、残りのアプリケーションコードを、永続化がどのように機能するかを知る必要がなくなります。

于 2012-12-31T15:10:15.080 に答える
4

一般的に私は著者の発言に同意しますが、いくつかの詳細を追加したいと思います

リポジトリDAL/ORMの違いは、最初に永続性メカニズムを抽象化するだけでなく、ドメインオブジェクトにアクセスするためのコレクションのようなインターフェイスを提供しデータベースアクセスコードの詳細からドメインオブジェクトを分離します。

違い

ビジネスロジックなどの外部レイヤーの場合:

  • 漏れのある抽象化を回避するのに役立ちます。外部レイヤーは、 DAL / ORMの特定の実装ではなく、リポジトリの抽象化に依存しています。したがって、リポジトリを操作している間、すべてのインフラストラクチャと論理的な依存関係を回避できます。
  • POJO / POCO / DTOのインスタンスではなく、ドメインオブジェクトで動作します
  • CRUD操作は、特定のDAL / ORMメソッドではなく、リポジトリによって提供されるコレクションのようなインターフェイスに適用されます。例: コンテキストやセッションではなく、を実装するコレクションを操作するIEnumerable

類似点

リポジトリの下にDAL/ORMが含まれており、同じ目的を果たします

于 2013-01-04T20:49:15.940 に答える