我对在研究存储库模式期间所读到的内容感到困惑。我想知道人们是否(错误地?)使用这个词,当他们只是指数据访问层时。
由于在索引中找不到“存储库”设计模式 https://rads.stackoverflow.com/amzn/click/com/0201633612(GoF),我转向企业应用架构模式 https://rads.stackoverflow.com/amzn/click/com/0321127420(福勒)。当福勒说时,他似乎很清楚(第 323 页)客户端创建一个条件对象并将其传递到存储库以获取结果。它看起来像这样:
public class Person
{
public List<Person> Dependents()
{
Repository repository = Registry.personRepository();
Criteria criteria = new Criteria();
criteria.equal(Person.BENEFACTOR, this);
return repository.matching(criteria);
}
}
标准对象是使存储库成为存储库的原因吗?如果不是,那是什么?如果抽象持久性机制(并因此构建查询)是目标,那么存储库与简单的 DAL/ORM 调用有何不同,如下所示:
public class PersonLogic
{
public List<Person> GetDependents()
{
IPersonData personData = DependencyContainer.Resolve<IPersonData>();
return personData.GetDependents();
}
}
对我来说,区别如下:
* 使用存储库模式,客户端构造不同的条件对象并调用其上的 Matching() 方法。
* 使用简单的DAL,客户端只需根据需要调用不同的方法即可。
还有比这更多的事情吗?程序员是否在真正指的是 DAL 时错误地使用了术语“存储库”?
EDIT
大卫·奥斯本将此链接发送至持久化模式 http://msdn.microsoft.com/en-gb/magazine/dd569757.aspx#id0400058。它指出:
基本上,存储库模式只是意味着在上面放置一个外观
你的持久性系统,这样你就可以保护你的其余部分
应用程序代码必须了解持久性如何工作。
这就是数据访问层的真正含义。在我看来,存储库和 DAL 确实是同一件事,也许“真正的”存储库使用标准对象。