存储库模式论坛

时间:2011-06-16 01:28:25

标签: linq design-patterns orm repository

根据Martin Fowler

  

...“客户端对象构造查询   声明和规范   将它们提交到Repository for   满意度“......

为什么呢?那时有什么好处?

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

1 个答案:

答案 0 :(得分: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这样的东西。