J'ai une liste de produits provenant d'un dépôt. Assez simple. Maintenant, je veux ajouter le filtrage et le tri. Le tri peut avoir lieu en dehors du référentiel car il n'y a pas de gains d'efficacité à les faire dans le référentiel (deviner). Je ne pouvais pas imaginer faire du filtrage en dehors du référentiel puisque nous ne voulons que charger les enregistrements qui nous intéressent. Je pense que vous voudriez créer un délégué de filtre et le passer au référentiel.Dépôt simple Question à propos du filtrage et du tri
Le code ci-dessous est un pseudo code C#. À quoi ressemblerait le code de fonctionnement pour trier/filtrer?
Le processus ci-dessous est vraiment centré sur les délégués de passer au dépôt de filtrer:
Product myProduct = Repo.GetProducts(filter);
(si cela était MS MVC, ce code existe dans le contrôleur):
Configuration d'un filtre :
//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**
une sorte d'installation:
// 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);
Retourner un modèle de vue:
// 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);
Comme vous pouvez le voir, ce code a besoin d'aide. Je suis vraiment à la recherche de tri et de code de classe de filtre qui pourrait faire ce travail, ou des liens vers des sources extérieures. Je suppose que le tri et le filtrage sont une pratique courante dans les modèles DDD et de conception, d'où la question. Supposons que le produit est un simple produit de commerce électronique;) Les notes Ajax de Rob Conery sont here
Merci.
Vous dites donc que l'ORM devrait fournir un tri et un filtrage pour vos classes POCO, par exemple si vous utilisez des modèles d'itérateur, etc. –
Idéalement, oui. Vous voulez que l'ORM et la couche de données gèrent le tri et le filtrage, car la base de données doit gérer cela. En utilisant IQueryable, le filtre + tri réel est mappé directement à la base de données. –
Par exemple, Linq to Sql prend en charge .Where. Donc j'utiliserais dc.Products.where (x => x.Name.contains ("Hammer")), et continuerais à ajouter.Wheres aussi longtemps que j'avais des filtres supplémentaires. Donc je devrais construire une grosse instruction foreach dans mon Repository pour accepter une liste de conditions puis les appliquer comme méthodes .where()? En ce qui concerne le tri, je ferais la même chose, comme .OrderBy (x => x.Name)? Construire ces délégués dans mon contrôleur, puis les passer en tant que paramètres dans la méthode de référentiel? –