如何Repository模式从简单的数据访问层的不同?(How does the Repositor

2019-08-05 02:03发布

我一直在我一直在我的存储库模式研究过程中读取混淆。 我使用这个词时,他们只是意味着一个数据访问层想,如果人们都(错误?)。

由于“资源库”中没有的索引中找到的设计模式 (GOF),我转身的企业应用架构模式 (福勒)。 福勒似乎非常清楚(页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);
    }
}

是标准的对象是什么让仓库的仓库? 如果没有,是什么呢? 如果抽象的持久性机制(因此构造查询)为目标,以什么方式存储库从simpe DAL / ORM呼叫这样的不同:

public class PersonLogic
{
    public List<Person> GetDependents()
    {
        IPersonData personData = DependencyContainer.Resolve<IPersonData>();
        return personData.GetDependents();
    }
}

对我来说,区别如下:
*与存储库模式,客户端构造不同条件的对象,并调用匹配()方法就可以了。
*使用简单的DAL,客户只需拨打基础上,他们想要的东西不同的方法。

难道还有比这更给它? 是程序员错误地使用术语“资源库”的时候,他们真的是DAL?

编辑

大卫·奥斯本发送此链接到持久性模式 。 它指出:

基本上,Repository模式只是意味着把一个门面在你的持久化系统,使您可以不必知道如何持久性保护工作的应用程序代码的其余部分。

这是一个真正的数据访问层是什么。 它真的在我看来,一个仓库和DAL都是一样的东西,也许是“真正的”资源库使用标准的对象。

Answer 1:

看看“使用的IQueryable接口”部分,在以后扩展和增强界上下文订单与注册 。 它提供了DAO /库实现的洞察力和平衡的讨论。

后来经鲍勃·霍恩所强调的, 持久模式的文章总结了:

基本上,Repository模式只是意味着把一个门面在你的持久化系统,使您可以不必知道如何持久性保护工作的应用程序代码的其余部分。



Answer 2:

总的来说,我同意作者的陈述,但我想补充一些细节

DAL / ORM的区别,首先不仅是抽象的持久性机制,而且还提供了集合类接口,用于访问域对象 ...,并从数据库访问代码的细节隔离域对象 :

差异

对于外部层,例如业务逻辑:

  • 有助于避免漏抽象 。 外层取决于存储库抽象 ,而不是一个具体的实施DAL / ORM的。 因此,你能避免所有的基础设施和逻辑的依赖与存储库工作时。
  • 域对象 ,而不是一个POJO / POCO / DTO的实例操作
  • CRUD操作施加到由存储库 ,而不是特定DAL / ORM方法提供采集类似的界面 。 例如.NET :与集合,实现工作IEnumerable ,而不是实体框架上下文或NHibernate的会议

相似

包含DAL / ORM下方,提供同样的目的



文章来源: How does the Repository Pattern Differ from a Simple Data Access Layer?