リポジトリからの製品のリストがあります。十分に単純です。次に、フィルタリングと並べ替えを追加します。ソートは、リポジトリ内で実行しても効率が向上しないため、リポジトリ外で実行される可能性があります (推測)。関心のあるレコードのみをロードしたいので、リポジトリの外でフィルタリングを行うことは想像できませんでした。フィルターデリゲートを作成してリポジトリに渡したいと思います。
以下のコードは疑似 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 は昔ながらの e コマース製品であると仮定してください ;) Rob Conery の Ajax ノートはこちら
ありがとう。