根据Martin Fowler的说法:

...“客户端对象以声明方式构造查询规范并将其提交到存储库以满足”...

为什么? 那时有什么优势?

我看到一个缺点:数据库查询在关系上传播和隐藏。 这使得调试变得更加困难。

===============>>#1 票数:2

优点是“what”(声明性规范)与“how”或实现细节分开。 因此,客户端不需要知道它是在查询关系数据库,Web服务,对象数据库(例如Mongo),XML数据存储等。

我们假设您正在使用RDBMS。 即便如此,客户端也不需要知道数据库是Oracle,MS SQL,SQLite,mySQL,PostGres等。当诫命“你不使用MS SQL”时,这将为你节省很多麻烦(或者其他什么)从山上下来。

附加层确实引入了一些开销。 但是(1)像(N)Hibernate这样的ORM工具非常擅长为你正在使用的任何后端优化生成的查询,以及(2)与数据库读取的成本相比,开销通常可以忽略不计,更不用说网络了服务电话。

我们现在正在从LINQ转换为NHibernate以避免“N + 1”问题(即,您为每个“主”数据库记录生成一个查询/命中,并为每个“子”记录生成查询/命中)。 而顺便说一下......就像LINQ到NHibernate这样的东西。

  ask by Eduardo translate from so

未解决问题?本站智能推荐:

1回复

用ORM替换存储库模式?

这是我创建的另一个线程的转贴。 我认为我的第一篇文章本质上有点夸夸其谈,因此已关闭,因此希望我可以更好地表达我的问题。 一些行业重量级人物似乎在努力建议在存储库模式上使用ORM并在DL层上构建您的产品。 因此,在您的应用程序层中,您将直接使用ORM而不是存储库。 一个示例是ayend
2回复

多数据提供者/ ORM上的存储库模式?

我只想说我有以下数据模型: 目前,它们每个都有自己的数据访问存储库,并使用实体框架作为其工作单元/ DbContext。 我打算从实体框架中取出配置部分,并使用Redis或Memcached作为其数据访问。 我甚至可能将EF切换到NHibernate或根本没有ORM,我可能会将数据库
3回复

使用多个存储库时存储库是什么样的:多个或多个:很多表?

我有一个MVC应用程序,它直接在视图中使用该实体框架模型对象。 我不确定这样的设计模式有多糟糕,但基于此示例,我需要使用存储库来实现缓存。 由于此视图使用EF的导航属性,我需要复制这个概念(或者我的内容类似)。 题 在处理许多具有1:多或多:多关系的表时,我应该如何构建
3回复

Linq to sql与中型Web应用程序的存储库

在Linq to Sql之上创建存储库模式实现对于中型面向公众的Web应用程序是一种好的设计吗? 该应用程序仅处理Sql服务器后端,因此需要快速开发 我真的很喜欢LINQ2SQL,因为它是一个整洁的DAL。 我想到了EF,但这对这个项目来说实在太多了。 在此先非常感谢您的建议
1回复

存储库模式的好处

民间, 我正在考虑如何使我的老板相信存储库模式的好处。 特别是在遇到以下问题之后。 这是冰淇淋库中的一种方法 这是对上述存储库函数的调用 难题是,在应用“谓词”之前,数据库中的所有冰淇淋都已加载到内存中。 至少那是我从生成的SQL推断得出的。 那是一个很大的“不
2回复

存储库模式+工作单元

经过近一年的时间,我正在开始一个新的mvc项目,这次是版本4.我想知道下面的存储库模式实现是否有更多的缺点而不是优点。 这样我就可以通过SqlUnitOfWork从一个点管理所有存储库。 我在之前的项目中使用了这个设计并且工作得很好,但我觉得它效率不高而且可能多余。 是否值得添加这样
3回复

将OData与存储库模式一起使用

我创建了一个数据库(SQL Server 2008 Express),并在Visual Studio 2010中使用OR设计器在顶部创建了一些LINQ to SQL实体(称为LinqEntitiesDataContext)。然后,我创建了一个Repository类和关联的IRepository接
3回复

存储库模式和Linq到sql

我正在尝试使用角色表,用户表和具有userid,roleid的外部参照表来实现用户身份验证和授权。 用于实现通用repoistory更新角色,插入角色,添加用户,添加用户到角色,更新用户,更新用户角色,验证用户,添加用户会话到审计等我是否为每个编写了单独的函数或者我可以使用一个通用方法用于
2回复

没有接口的存储库模式

没有接口实现存储库模式有什么不好? 储存库-类 如果我们想要扩展存储库,则使用ProductRepository:存储库和overrider \\ extend方法。 我知道接口让我们: 使用TDD方法 更换持久性引擎 但是,如果我不想替换我的nhi
3回复

存储库模式是什么类型的?

总的来说,我知道有三种大型的设计模式 创作模式(工厂,单身等) 结构模式(复合,适配器,代理等) 行为模式(规范,命令等) 但我不知道我可以将Repository模式放入哪种类型。 存储库模式是否属于以上三种类型之一? 或者它是在(2)和(3)模式的中间