1

私のアプリケーションは大量のデータを処理する必要があり、通常の選択サイズは約 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 は必要ありません。

問題は、リポジトリに渡されるセレクターを制御できないことです。翻訳できないメソッド呼び出しなどが含まれている場合もあります。

私の質問は:

  1. これまで、型の爆発を恐れて ViewModel を作成することを避けてきました。それらを実装する最良の方法は何ですか? 投影を行うセレクターを利用可能にする必要がありますか?
  2. クエリが例外なく実行される場合を除き、何もチェックしない単体テストを作成する必要がありますか?
4

1 に答える 1

1

ViewModel を作成して、既知の一連のクラスで作業することをお勧めします。現在、とにかく管理が少し難しい匿名型を使用しているため、型爆発は実際には問題ではありません。

(通常) View ごとに 1 つの ViewModel がある場合、それは非常にクリーンになります。場合によっては、ViewModel を共有することもできますが、遅かれ早かれ、消費者の 1 人がより多くのデータ/フィールドを必要とし、もう 1 人が肥大化した ViewModel になるため、共有しないことをお勧めします。

于 2009-09-11T11:55:12.463 に答える