Asp.net mvc 3 我应该在哪一层上订购从数据库接收的列表
我正在使用具有多个层的实体框架(SOA架构)。我想知道在哪里最好对列表或IEnumerable进行排序。。它会在存储库的持久层上吗?它会在服务层上吗?还是在表示层上?(在控制器中)Asp.net mvc 3 我应该在哪一层上订购从数据库接收的列表,asp.net-mvc-3,entity-framework-4.1,soa,Asp.net Mvc 3,Entity Framework 4.1,Soa,我正在使用具有多个层的实体框架(SOA架构)。我想知道在哪里最好对列表或IEnumerable进行排序。。它会在存储库的持久层上吗?它会在服务层上吗?还是在表示层上?(在控制器中) 和为什么?当然可以在任何层次对列表进行排序,但您必须记住您选择的含义 如果要处理大型数据集,可能需要在数据库级别对其进行排序(出于性能原因)。如果数据集很小,这不是问题 如果在数据访问层执行排序:您必须将排序选项传递给GetList方法,或者将所有方法调用方置于相同的排序顺序 我认为排序顺序更像是一个UI问题,最好在
和为什么?当然可以在任何层次对列表进行排序,但您必须记住您选择的含义 如果要处理大型数据集,可能需要在数据库级别对其进行排序(出于性能原因)。如果数据集很小,这不是问题 如果在数据访问层执行排序:您必须将排序选项传递给
GetList
方法,或者将所有方法调用方置于相同的排序顺序
我认为排序顺序更像是一个UI问题,最好在表示层处理(在您的例子中是控制器操作)。
更新@Rushino评论: 如果您在数据库级别进行分页,那么除了在数据库级别进行排序之外别无选择。
更新2 这就是为什么在数据库级别进行分页时需要在数据库级别进行排序。我将举例说明: 给定样本数据: 3
2
6
4
5
一, 场景1:数据库分页,数据层排序 当您请求第1页(页面大小为3)时,数据库将返回: 3
2
六, 然后,数据层将对此进行排序并返回: 2
3
六, 场景2:数据库中的排序和分页 当您请求第1页(页面大小为3)时,数据库将首先排序: 1
2
3
4
5
六, 然后将第1页返回到数据层: 1
2
三,
如您所见,在进行分页时在数据库中进行排序的原因并不是因为数据量。这是因为这是获得正确结果的唯一方法。这就是我在表示层上的想法。。我还忘了提到它,但当我从数据库中获取数据时,它总是以100条记录(或用户定义的低记录集)的形式存在。。用于分页。在这种情况下,您必须在数据库级别进行排序。