31

I found two patterns which appear to have the same goal - what is the difference?

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

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

4

1 に答える 1

45

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

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

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

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

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

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

于 2012-11-25T12:17:24.113 に答える