一直在查看 MVC 店面,发现 IQueryable 是从存储库类返回的。想知道您是否不使用 LINQ,返回该对象是否有意义?在 LINQ 的情况下,由于延迟执行,因此在服务层中添加过滤是有意义的,但如果您不使用 LINQ,则在许多情况下您会希望在 DB 中进行过滤。在这种情况下,我是否只需将执行过滤的方法添加到存储库?如果我这样做了,服务层真的有用吗?
CSharpAtl
问问题
2474 次
3 回答
5
任何一种方式都可以进行论证,请参阅最近的博客文章:我的存储库是否应该公开 IQueryable?
于 2009-01-13T20:56:18.413 回答
3
Rob Conery 放入 MVC Storefront 的 IQueryable 内容是创新的,但在创建存储库时绝不是标准。通常,存储库负责将您的域映射到数据库和从数据库映射。返回 IQueryable 并不真正执行任何映射,而是依赖服务层来执行此操作。这有其优点和缺点,但足以说明这不是唯一的方法。
但是,您会注意到,由于所有重复的代码,您的服务最终会变得有点臭。例如,如果您只想获取数据库中所有用户的列表,则必须在存储库和服务层中定义该函数。然而,服务层的亮点在于一个操作需要多个进出数据库的事务。
于 2009-01-13T21:20:23.807 回答
2
将 IQueryable 暴露给服务层时我遇到的问题是,如果您想在不破坏服务层代码的情况下将存储库层包装在 Web 服务后面,那么您就不能,如果不使用ADO.NET 数据服务,那么您的所有存储库代码本质上将变得多余。
虽然我认为它对于小型应用程序可能非常有效,但当您开始考虑扩展和分发时,它的弊大于利。
于 2009-01-13T21:30:52.117 回答