私のアプリケーションは大量のデータを処理する必要があり、通常の選択サイズは約 10000 行です。パフォーマンスを向上させるために、必要なデータのみを選択することをお勧めします。
計算や意味のあるビジネスを行う必要がある場合、モデルを正しくインスタンス化するためにすべてのデータを選択して、その機能に頼ることができます。
データのみを (ほとんどの場合テーブルで) 表示する場合、これは私が望むものではありません。取得するデータの量を絶対最小値に制限したいと考えています。
これまでのところ、リポジトリからデータを取得するために次のアプローチを使用してきました (以下に示すのは、リポジトリ内ですべての魔法を実行する方法です。
private IEnumerable<TResult> GetAllProject<TResult>(Expression<Func<T, TResult>> selector, Expression<Func<T, bool>> predicate)
{
SetReadContext();
var query = DataContex.Table<Order>().Where(predicate).Select(selector);
return query.ToList();
}
そうすれば、リポジトリを呼び出すメソッドに匿名型の型定義があり、そこで型を透過的に操作できます。
すべてのコントローラーは、ビューに渡すデータを正確に定義できます。ビューでグリッド コントロールを処理することなく、列の順序などに直接影響を与えることができるため、非常に効率的です。セレクターに基づいてそれを把握するため、DataContext に LoadOptions は必要ありません。
問題は、リポジトリに渡されるセレクターを制御できないことです。翻訳できないメソッド呼び出しなどが含まれている場合もあります。
私の質問は:
- これまで、型の爆発を恐れて ViewModel を作成することを避けてきました。それらを実装する最良の方法は何ですか? 投影を行うセレクターを利用可能にする必要がありますか?
- クエリが例外なく実行される場合を除き、何もチェックしない単体テストを作成する必要がありますか?