Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 开始返回IQueryable的时间<;T>;而不是IList<;T>;到我的Web UI/Web API层?_Asp.net Mvc_Repository Pattern_Iqueryable_Multi Tier - Fatal编程技术网

Asp.net mvc 开始返回IQueryable的时间<;T>;而不是IList<;T>;到我的Web UI/Web API层?

Asp.net mvc 开始返回IQueryable的时间<;T>;而不是IList<;T>;到我的Web UI/Web API层?,asp.net-mvc,repository-pattern,iqueryable,multi-tier,Asp.net Mvc,Repository Pattern,Iqueryable,Multi Tier,我有一个多层应用程序,它从所有数据访问的存储库模式开始,并将IQueryable返回到服务层。服务层(包括所有业务逻辑)将IList返回给控制器(注意:我使用ASP.NETMVC作为UI层)。在数据访问层返回IQueryable的好处是,它允许我的存储库非常简单,并且数据库查询可以延迟。但是,我正在触发服务层中的数据库查询,这样我的单元测试就更可靠了,而且我不会让控制器灵活地修改我的查询。然而,我最近遇到了几种情况,如果将查询的执行推迟到控制器,性能会显著提高,因为控制器必须对特定于UI的数据进

我有一个多层应用程序,它从所有数据访问的存储库模式开始,并将IQueryable返回到服务层。服务层(包括所有业务逻辑)将IList返回给控制器(注意:我使用ASP.NETMVC作为UI层)。在数据访问层返回IQueryable的好处是,它允许我的存储库非常简单,并且数据库查询可以延迟。但是,我正在触发服务层中的数据库查询,这样我的单元测试就更可靠了,而且我不会让控制器灵活地修改我的查询。然而,我最近遇到了几种情况,如果将查询的执行推迟到控制器,性能会显著提高,因为控制器必须对特定于UI的数据进行一些投影。此外,随着oData等东西的出现,我开始怀疑端点(例如web UI或web API)是否应该直接与IQueryable一起工作。你的想法是什么?是时候开始将IQueryable从服务层返回到UI层了吗?还是坚持使用IList

此线程位于此处:
似乎可以保证将IList返回到UI层,但我想知道是否由于新的新兴技术和技术,情况正在发生变化。

我喜欢尽可能使用IQueryable界面,唯一的问题是当您最终在控制器级别执行复杂的筛选或按需重新查询时,如果您有以下情况:

//DATA ACCESS
    public IQueryable<T> GetStudents()
    {
    return db.Students;
    }
对我来说没问题,但是如果任何其他模块需要使用相同的过滤器,你不能调用它,因为它在控制器级别。 因此,对我来说,这是一个在干燥、灵活性和系统可伸缩性之间的平衡。
如果您需要一个完全可扩展的系统,您需要对GetStudents()方法执行一些或几个重载,并消除控制器级别的任何重新锐化。

实际上,您链接的线程是不可知的;它不喜欢这样或那样。测试驱动的开发人员总是倾向于修复接口,以使其更具可预测性。就个人而言,我喜欢IQueryable的灵活性和懒散的执行。在将ToList()插入UI之前,始终可以调用它。
var result = obj.GetStudents().Where(d=>d...);