数据映射器是映射器的一层,它在对象和数据库之间移动数据,同时保持它们彼此独立以及映射器本身。
存储库使用类集合接口在域和数据映射层之间进行调解,以访问域对象。
因此, Data Mappers的主要工作是执行对象和表行之间的映射,并保持域和数据库彼此独立,而主要工作或存储库是提供更多面向对象的持久层视图并保持领域层完全独立于持久层。
a) 据我所知,Data Mapper和Repository都抽象了持久层,唯一的区别是Repository提供了更多的持久层的面向对象视图?
b) 在大多数实现中, Repository位于Data Mapper层之上,但在以下实现中(来自《Architecting Net Solutions for the Enterprise》一书),相同的接口同时作为Data Mapper和Repository发挥作用(因此它也掩盖了持久性层作为一个集合):
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);
}
与Repository位于数据映射器层之上的设计相比,这种设计的优点/缺点是什么?
谢谢你