У меня есть список продуктов, поступающих из хранилища. Достаточно просто. Теперь я хочу добавить фильтрацию и сортировку. Сортировка может происходить за пределами хранилища, поскольку при их использовании внутри хранилища не происходит повышения эффективности (предположим). Я не мог себе представить фильтрацию за пределами хранилища, так как мы хотим загружать только те записи, которые нам нужны. Я думаю, вы захотите создать делегат фильтра и передать его в хранилище.
Приведенный ниже код является псевдо-кодом C #. Как будет выглядеть работающий код для сортировки / фильтрации?
Процесс, описанный ниже, действительно направлен на передачу делегатов в хранилище для фильтрации:
Product myProduct = Repo.GetProducts( filter );
(если бы это был MS MVC, этот код существовал бы в контроллере):
Настройка фильтра:
//TODO: Need filter class definition
var filter = new Filter(); // made up object class for now
filter.AddCondition( field, operator, value); // do this for each filter condition
filter.AddCondition( Product.Name, contains, "Hammer"); // Product.Name ?? (Example)
Product myProducts = Repo.GetProducts( filter ); // the Product call **FILTER**
Настройка сортировки:
// TODO: Need sort class definition
var sort = new Sort(); // another made up object class for now
sort.AddOrder( field, priority, sequenceUp) // Sequence enum is ascending/descending
sort.AddOrder( Product.Name, 1, ascending) // (Example) **SORT**
myProducts.AddSort(sort);
Вернуть модель просмотра:
// Next part strips off unnecessary fields for view (Presentation model)
// So we are not sending a huge data model to the view (hopefully good)
// TODO: Replace string with Service? function to extract a miniProduct from Product
MiniProduct myMinis = MakeMiniProductsFrom( myProducts); // Service?
// Determine response type (XML, JSON, HTML View) and return appropriate data
// use "x-requested-by" as per Rob Conery noted below
if (Request.IsAjaxRequest()) return Json(myMinis);
else return View(myMinis);
Как видите, этот код нуждается в некоторой помощи. Я действительно ищу сортировку и фильтрацию кода класса, который мог бы сделать эту работу, или ссылки на внешние источники. Я предполагаю, что сортировка и фильтрация являются стандартной практикой в DDD и шаблонах проектирования, поэтому вопрос. Предположим, что Product представляет собой простой старый продукт для электронной коммерции;) Примечания Аякса Роба Конери: здесь
Спасибо.