我正在使用具有多个层的实体框架(SOA架构)。我想知道最好在哪里做一个列表或IEnumerable的排序..它会在存储库的持久层上吗?它会在服务层吗?还是会在表现层? (在控制者中)
为什么?
答案 0 :(得分:2)
虽然可以在任何一层对列表进行排序,但您必须牢记您选择的含义。
如果您正在处理大型数据集,则可能需要在数据库级别对其进行排序(出于性能原因)。如果数据集很小,这不是问题。
如果您在数据访问层执行排序:您必须将排序选项传递给GetList
方法,或者让所有方法调用者接受相同的排序顺序。
我将排序顺序视为更多的UI问题,最好在表示层处理(在您的情况下是控制器操作)。
<小时/> 响应@Rushino评论更新: 如果您在数据库级别进行分页,那么您别无选择,只能在数据库级别进行排序。
3
2
6
4
5
1
场景1:数据库中的分页,在数据层中排序
当您请求第1页(页面大小为3)时,数据库将返回:
3
2
6
然后数据层将对此进行排序并返回:
2
3
6
场景2:数据库中的排序和分页
当您请求第1页(页面大小为3)时,数据库将首先排序:
1
2
3
4
5
6
然后将第1页返回到数据层:
1
2
3
正如您所看到的,在进行分页时在数据库中进行排序的原因不是因为数据量。这是因为这是获得正确结果的唯一方法。