На каком слое я должен заказать список, полученный из базы данных - PullRequest
1 голос
/ 01 февраля 2012

Я использую Entity Framework с несколькими уровнями (архитектура SOA).Мне было интересно, где лучше сделать упорядочение списка или IEnumerable ... будет ли это на уровне постоянства из репозиториев?это будет на уровне обслуживания?или это будет на уровне представления?(в контроллерах)

и почему ?

1 Ответ

2 голосов
/ 01 февраля 2012

Хотя, конечно, можно отсортировать список на любом слое, но вы должны помнить о последствиях по своему выбору.

Если вы имеете дело с большим набором данных, вы можете отсортировать его по адресууровень базы данных (по соображениям производительности).Если набор данных небольшой, это не проблема.

Если вы выполняете сортировку на уровне доступа к данным: вам нужно либо передать параметры сортировки вашим GetList методам, либо подвергнуть всех вызывающих методов одному и тому жепорядок сортировки.

Я рассматриваю порядок сортировки как часть пользовательского интерфейса, и это лучше всего обрабатывать на уровне представления (в вашем случае действие контроллера). Обновление в ответ на комментарий @Rushino: Если вы делаете нумерацию страниц на уровне базы данных, у вас нет выбора, кроме как сортировать на уровне базы данных. Обновление 2 Вот почему вам нужно сортировать на уровне базы данных, когда вы делаете нумерацию страниц на уровне базы данных.Я продемонстрирую на примере: приведенные примеры данных:

326451

Сценарий 1: разбиение на страницы в базе данных, сортировка в слое данных

При запросе страницы 1 (с размером страницы 3) база данных вернется:

326

Слой данных затем отсортирует это и вернет:

236

Сценарий 2: сортировка и разбиение на страницы в базе данных

При запросе страницы 1 (с размером страницы 3) база данных будет сортироваться первой:

123456

Затем верните страницу 1 на уровень данных:

123

Как видите, причина сортировки в базе данных при разбивке на страницы не в объеме данных.Это потому, что это единственный способ получить правильные результаты.

...