2009-01-13 83 views
5

一直在寻找MVC店面,并看到IQueryable是从存储库类返回的。想知道如果你不使用LINQ是否有意义返回该对象?在LINQ中,由于延迟执行是有意义的,因此在服务层中添加过滤是有意义的,但是如果不使用LINQ,则在许多情况下都需要在数据库中进行过滤。在这种情况下,我只需将添加过滤器的方法添加到存储库中?如果我这样做,服务层真的有用吗?存储库模式 - MVC店面

回答

5

参数可以进行两种方式,看到这个最近的一篇博客:Should my repository expose IQueryable?

+0

我开始在MONO上使用MySQL的项目...所以不使用LINQ ...可能只是直接使用ADO ...改变什么? – CSharpAtl 2009-01-13 21:09:20

3

是罗布科纳投入MVC店面IQueryable的东西是创新的,但绝不是常态,当谈到创建存储库。通常,存储库负责将您的域映射到数据库和从数据库映射。返回IQueryable并不真正执行任何映射,并依赖于服务层来完成此操作。这有其优点和缺点,但足以说它不是唯一的方法。

但是,您会注意到,由于所有重复的代码,您的服务最终变得有点臭。例如,如果您只想获取数据库中所有用户的列表,则必须在存储库和服务层中定义该函数。然而,在服务层发光的情况下,一次操作需要多个数据库事务/从数据库中进行事务。

+0

存储库不应该执行映射。存储库应该在域实体和数据映射器之间进行调解。关于存储库模式的很好的描述可以在“蓝色圣经”中找到http://books.google.com/books?id=7dlaMs0SECsC&dq=domain+driven+design – Paco 2009-01-13 22:34:26

2

我将IQueryable暴露给服务层的问题是,如果您曾想要将Web服务器后面的存储库层包装在不破坏服务层代码的情况下,您不能使用ADO.NET Data Services,存储库代码基本上会变得多余。

虽然我认为它对于小应用来说可能非常有效,但当你开始考虑缩放和分配时,它确实比糟糕更糟糕。

+0

不应该将服务层封装在Web服务之后?将ORM层部署到单独的层时有什么意义? – 2011-03-23 22:56:16