Re[15]: Работа с ORM
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.07.11 11:10
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, Gengzu, Вы писали:


G>>IQueriable очень хороший интерфейс, но увы, часто его использование приводит к непредсказуемым последствиям. и я не против его использования как такового, но я против протаскивания его через все слои приложения.


Z>Еще раз. Зачем его протаскивать через все слои?


Затем что запрос эффективнее строить там где наиболее полно известна информация об этом запросе. А известна она на уровне UI.
Например:
1)Пользователь нажал на страницу 2 в списке каких-то объектов
2)В UI есть информация какой список объектов нужен и что вызвана страница 2
3)Код PL выполняет получение списка объектов из сервиса BL (IQueryable) и выполняет разбивку на страницы .Skip(...).Take(...), накладывает проекции, материализует для передачи UI.
3)Сервис BL получает от Repository IQueryable, фильтрует все Hidden объекты и накладывает предикаты видимости в зависимости от роли пользователя.
4)Repository является тонкой оберткой на ORM, чтобы в тестах его можно было заменить на что-то полегче.

Если не протаскивать IQueryable, то придется "протаскивать" передачу параметров из UI в нижние слои. Причем под каждый набор параметров понадобится свой метод, что приведет у увеличению количества методов, копипасте и другим плохим вещам.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.