我已经看过MVC storefront,并且看到IQueryable是从存储库类返回的。想知道如果你没有使用LINQ,那么返回那个对象有意义吗?在LINQ In的情况下,由于延迟执行,所以在服务层中添加过滤是有意义的,但是如果您不使用LINQ,那么在许多情况下,您会希望在DB中进行过滤。在这种情况下,我是否只需要向存储库添加执行过滤的方法?如果我这样做了,服务层真的有用吗?
发布于 2009-01-13 20:56:18
无论哪种方式,都可以进行论证,请参阅最近的博客帖子:Should my repository expose IQueryable?
发布于 2009-01-13 21:20:24
Rob Conery在MVC Storefront中添加的IQueryable内容是创新的,但绝不是创建存储库的标准。通常,存储库负责将您的域映射到数据库或从数据库映射。返回IQueryable实际上并不执行任何映射,而是依赖于服务层来执行映射。这有它的优点和缺点,但可以说这不是唯一的方法。
但是,您会注意到,由于所有重复的代码,您的服务最终会变得有点难闻。例如,如果您只想获取数据库中所有用户的列表,则必须在存储库和服务层中定义该函数。然而,当一个操作需要多个来往于数据库的事务时,服务层才会大放异彩。
发布于 2009-01-13 21:30:52
我在向服务层公开IQueryable时遇到的问题是,如果您想在不破坏服务层代码的情况下将存储库层包装在Web Service后面,那么如果不使用ADO.NET Data Services,那么您所有的存储库代码实际上都将变得多余。
虽然我认为它对于小型应用程序来说可能是相当有效率的,但当你开始考虑扩展和分发时,它的坏处多于好处。
https://stackoverflow.com/questions/440757
复制相似问题