我应该在哪一层订购从数据库收到的清单

时间:2012-01-31 23:09:23

标签: asp.net-mvc-3 entity-framework-4.1 soa

我正在使用具有多个层的实体框架(SOA架构)。我想知道最好在哪里做一个列表或IEnumerable的排序..它会在存储库的持久层上吗?它会在服务层吗?还是会在表现层? (在控制者中)

为什么

1 个答案:

答案 0 :(得分:2)

虽然可以在任何一层对列表进行排序,但您必须牢记您选择的含义。

如果您正在处理大型数据集,则可能需要在数据库级别对其进行排序(出于性能原因)。如果数据集很小,这不是问题。

如果您在数据访问层执行排序:您必须将排序选项传递给GetList方法,或者让所有方法调用者接受相同的排序顺序。

我将排序顺序视为更多的UI问题,最好在表示层处理(在您的情况下是控制器操作)。

<小时/> 响应@Rushino评论更新: 如果您在数据库级别进行分页,那么您别无选择,只能在数据库级别进行排序。
更新2 这就是为什么在数据库级别进行分页时需要对数据库级别进行排序的原因。我将举例说明: 给出样本数据:

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

正如您所看到的,在进行分页时在数据库中进行排序的原因不是因为数据量。这是因为这是获得正确结果的唯一方法。