私は同じ目標を持っているように見える2つのパターンを見つけました - 違いは何ですか?データマッパーパターンとリポジトリパターンの違いは?
http://martinfowler.com/eaaCatalog/dataMapper.html
http://martinfowler.com/eaaCatalog/repository.html
私は同じ目標を持っているように見える2つのパターンを見つけました - 違いは何ですか?データマッパーパターンとリポジトリパターンの違いは?
http://martinfowler.com/eaaCatalog/dataMapper.html
http://martinfowler.com/eaaCatalog/repository.html
照会構築コードが濃縮されているマッピング 層上の抽象化の別の層[リポジトリです]。
DataMapper
はフェンスのDB側は、ビジネス・ロジックの詳細について知る必要はありません保証し、どのようにデータがあなたのビジネスオブジェクトによってメモリに保持し、フェンスのあなたのビジネスの側にはありませんさデータの格納方法を知る必要があります。
説明すると、データはDB内に一連の行として保持されているとします。たとえば、各行がストア内の項目を表しているとします。インメモリ側では、その情報をStoreItem
のリストではなく、在庫がある品目と在庫切れ品の品目の2つのリストとして保管することをお勧めします。 1つのリストと2つのリストの間の移行を処理するのはDataMapper
の仕事です。
フェンスのビジネス側に他のオブジェクトと継承のリストを追加することで、複雑にすることができます。 'DataMapper'は、その表現との関係をリレーショナルDBに変換する必要があります。
「リポジトリ」は、ビジネス側に「SELECT * FROM table WHERE条件」機能を提供します。フィルタを指定すると、そのフィルタに一致するオブジェクトのコレクションが返されます。
「DataMapper」は単一のオブジェクトを扱いますが、「リポジトリ」はオブジェクトのコレクションを扱い、 'DataMapper'によって提供される機能を拡張します。
良い説明、これらがどのように異なるかの例を挙げることができます。 Java、.NET、PHPのフレームワークで見ると、この2つのコンセプトは同じ意味で使用されているようで、非常に混乱しています。 –
@ LordYggdrasill特定のフレームワークに関する特定の問題がある場合は、このサイトの質問の形で提示する必要があります。クエリとマッピングは論理的に異なるタスクですが、それらの実装はしばしば密接に結合されているため、なぜいくつかの引用がそれらを一緒に考えることを選択する理由が説明されることがあります。 – Andrei
ここでは、ASP.NETのWebサイトからの例があります。ご覧のように、リポジトリパターンの実装は、POEAAのMartin FowlerのData Mapperとまったく同じように見えます。あなたはこの現象を説明する方法を知っていますか?たぶん、ASP.NETのリポジトリは実際にデータマッパーですか? http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns- in-an-asp-net-mvc-application –
実際にオブジェクトをマッピングするよりも、データマッパーが大きすぎるか、または大量のクエリを処理する場合は、別のクラスを導入して、リポジトリパターンとして名前を付けることに集中します。 – Rockstart