データマッパーは、オブジェクトとデータベースの間でデータを移動する一方で、オブジェクトとマッパー自体からの独立性を維持するマッパーのレイヤーです。
リポジトリは、ドメインオブジェクトにアクセスするためのコレクションのようなインターフェイスを使用して、ドメインとデータマッピングレイヤーの間を仲介します。
したがって、データマッパーの主な仕事は、オブジェクトとテーブル行の間のマッピングを実行し、ドメインとデータベースを互いに独立させておくことです。一方、主な仕事またはリポジトリは、永続性レイヤーのオブジェクト指向ビューを提供し、維持することです。永続性レイヤーから完全に独立したドメインレイヤー。
a)私が知る限り、データマッパーとリポジトリの両方が永続層を抽象化しますが、唯一の違いは、リポジトリが永続層のオブジェクト指向ビューを提供することです。
b)ほとんどの実装では、リポジトリはデータマッパーレイヤーの最上位にありますが、次の実装(「エンタープライズ向けネットソリューションの設計」の本から)では、データマッパーとリポジトリの両方と同じインターフェイスが機能します(したがって、永続性もマスクされます)コレクションとしてのレイヤー):
public interface IDataMapper<T>
{
/* Persistence */
void Create(T item);
void Update(T item);
void Delete(T item);
/* Repository */
IList<T> GetAll();
IList<T> GetAll(int index, int size);
int GetCount();
int GetCount(Query query);
T GetByKey(object key);
IList<T> GetByCriteria(Query query);
IList<T> GetByCriteria(Query query, int index, int size);
string TranslateQuery(Query query);
}
リポジトリがデータマッパーレイヤーの上にあるデザインと比較して、そのようなデザインの長所/短所は何ですか?
ありがとうございました