web-dev-qa-db-ja.com

データマッパーパターンはリポジトリパターンとどのように異なりますか?

同じ目標を持っているように見える2つのパターンを見つけました-違いは何ですか?

http://martinfowler.com/eaaCatalog/dataMapper.html

http://martinfowler.com/eaaCatalog/repository.html

27
John Smith

[リポジトリは]クエリ構築コードが集中しているマッピングレイヤー上の別の抽象化レイヤーです。

DataMapperは、フェンスのDB側がビジネスロジックの詳細や、データがビジネスオブジェクトによってメモリに保持される方法について知る必要がなく、フェンスのビジネス側が必要としないことを保証します。データがどのように保存されているかを知るため。

説明のために、データが行のセットとしてDBに保持されていると考えてください。たとえば、各行がストア内のアイテムを表しているとします。インメモリ側では、その情報をStoreItemのリストとしてではなく、在庫のあるアイテム用と在庫切れのアイテム用の2つのリストとして保持することをお勧めします。 1つのリストと2つのリストの間の遷移を処理するのはDataMapperの仕事です。

フェンスのビジネス側に他のオブジェクトと継承のリストを追加することで、事態を複雑にすることができます。 'DataMapper'は、その表現との間でリレーショナルDBに変換する必要があります。

「リポジトリ」は、「SELECT * FROMテーブルWHERE条件」機能をビジネス側に提供します。フィルタを指定すると、そのフィルタに一致するオブジェクトのコレクションが返されます。

つまり、「DataMapper」は単一のオブジェクトを扱い、「Repository」はオブジェクトのコレクションを扱い、「DataMapper」によって提供される機能を拡張します。

43
Andrei