質問

アプリケーションは大量のデータを処理する必要があります。通常の選択サイズは約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. クエリが例外なく実行される場合以外は何もチェックしない単体テストを作成する必要がありますか?
役に立ちましたか?

解決

ViewModelsを作成して、既知のクラスのセットで作業することをお勧めします。現在、とにかく匿名型を使用しているため、Type Explosionは実際には問題になりません。 / p>

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top