存储库模式 - MVC店面

时间:2009-01-13 20:52:03

标签: asp.net-mvc linq repository-pattern

一直在查看MVC店面,并看到从存储库类返回IQueryable。想知道如果你没有使用LINQ,那么返回该对象是否有意义?在LINQ因为延迟执行而有意义的情况下,因此在服务层中添加过滤是有意义的,但是如果不使用LINQ,则在许多情况下您希望在DB中进行过滤。在这种情况下,我只是添加对存储库进行过滤的方法吗?如果我这样做,服务层真的有用吗?

3 个答案:

答案 0 :(得分:5)

参数可以采用任何一种方式,请参阅最近的博客文章:Should my repository expose IQueryable?

答案 1 :(得分:3)

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

但是,您会注意到,由于所有重复的代码,您的服务最终会变得有点臭。例如,如果您只想获取数据库中所有用户的列表,则必须在存储库和服务层中定义该功能。但是,服务层闪耀的地方是,当一次操作需要与数据库进行多次事务时。

答案 2 :(得分:2)

我将IQueryable暴露给服务层的问题是,如果你想在不破坏服务层代码的情况下将Repository层包装在Web服务之后,那么就不能不使用ADO.NET Data Services但是那么你的所有存储库代码基本上都会变得多余。

虽然我认为对于小型应用程序来说它可以非常高效,但是当你开始考虑扩展和分发时,它确实比坏事更糟糕。