【发布时间】:2011-02-02 07:58:24
【问题描述】:
我有一个多层应用程序,它以存储库模式开始,用于所有数据访问,并将 IQueryable 返回到服务层。包含所有业务逻辑的服务层将 IList 返回给控制器(注意:我将 ASP.NET MVC 用于 UI 层)。在数据访问层返回 IQueryable 的好处是它允许我的存储库非常简单,并且可以延迟数据库查询。但是,我在我的服务层中触发了数据库查询,以便我的单元测试更可靠,并且我没有让控制器灵活地重塑我的查询。但是,我最近遇到了几种情况,其中将查询的执行推迟到控制器会显着提高性能,因为控制器必须对特定于 UI 的数据进行一些预测。此外,随着 oData 之类的出现,我开始怀疑端点(例如 Web UI 或 Web API)是否应该直接与 IQueryable 一起工作。你都有些什么想法呢?是时候开始将 IQueryable 从服务层返回到 UI 层了吗?还是坚持使用 IList?
这里的帖子:To return IQueryable<T> or not return IQueryable<T> 似乎可以保证将 IList 返回到 UI 层,但我想知道是否会因为新出现的技术和技术而发生变化。
【问题讨论】:
-
实际上您链接的线程是不可知的;它不赞成一种或另一种方式。测试驱动的开发人员总是倾向于修复接口,这样它就更可预测了。就个人而言,我喜欢 IQueryable 的灵活性和延迟执行。在将 ToList() 插入 UI 之前,您始终可以调用它。
标签: asp.net-mvc repository-pattern iqueryable multi-tier