MVVMリポジトリフィルタリング
-
09-09-2020 - |
質問
私はJosh Smithの大部分に基づいていくつかのマスター詳細クラスを持っています MSDN文献。その素晴らしいコード、特に例では、しかし、リポジトリのいくつかのサブセットが欲しい状況をどのように処理するのが最善であるか疑問に思います。
だからJoshはAllCustomersViewModelというクラスを持ち、次のようなものをコードしています。
public AllCustomersViewModel(CustomerRepository customerRepository)
{
if (customerRepository == null) throw new ArgumentNullException("customerRepository");
// Populate the AllCustomers collection with CustomerViewModels.
_allCustomers = _customerRepository
.GetCustomers()
.Select(cust => new CustomerViewModel(cust, _customerRepository))
.ToList();
}
.
あなたがrepredscustomers、excustomers、localcustomersなどが欲しい状況を解決しますか??
彼のコードは、それぞれのためのViewModelクラスを提案し、そのクラスでハードコーディングされたリポジトリのフィルタリングを示唆しています。
またはその他のフィルタをリポジトリとともにViewModelに渡す方法は?
この特定の問題をどのように解決しますか?
脇に、誰かがこのような問題を解決するために特定の特定の方法またはIQUERYABLEの使い方を示すリンクまたは良い例を持っているか?
歓声、
Berryl
解決
1つのオプション(そしておそらく最もクリーンで最もクリーンな)は、それらのメソッドをCustomerRepository
- e.に追加することです。GetPreferredCustomers()
、GetLocalCustomers()
など
また、本当に抽象化に対して作業する必要があるため、ICustomerRepository
をView Modelコンストラクタに渡す必要があります。これはあなたの具象的なカスタマーリポジトリからあなたのビューモデルコードを切り離します(この場合はXMLファイルから読み取るもの)、実装を簡単にスパップアウトすることを容易にします。単体テストの場合は
他のオプションは、あなたが議題のあるように、あなたのリポジトリがIQueryable<T>
を公開することです。あなたがイマシア可能なものに縛られて幸せであり、データアクセスの実装がLINQプロバイダをサポートしようとしていると確信しているならば、それは良い柔軟性を提供します。詳細情報