リポジトリパターンではページングやソートなどはどこにありますか? 質問する

リポジトリパターンではページングやソートなどはどこにありますか? 質問する

asp.net リポジトリ パターン プロジェクトでデータのページングと並べ替えのロジックをどこに配置すればよいですか?

サービス層に配置するか、コントローラーに配置してコントローラーが直接リポジトリを呼び出すようにするか?コントローラー -> リポジトリが表示されますここjQuery グリッド用。

しかし、その記事とは異なり、私のリポジトリはIQueryable<datatype>

ベストアンサー1

ICollection<T>リポジトリがマテリアライズド シーケンス ( 、List<T>) などを返す場合は、リポジトリに配置する必要があります。

しかし、もしあなたが戻ってくるのであればIQueryable<T>(私のように)、コントローラーとリポジトリの間を仲介するサービス レイヤーがあり、それが IQueryable に対してクエリを実行し、それを具体的なコレクションに具体化することを願っています。

したがって、ページングをサービス層に配置します。

このようなもの:

public PagedList<T> Find(Expression<Func<T,bool>> predicate, int pageNumber, pageSize)
{
   return repository
             .Find()
             .Where(predicate)
             .ToPagedList(pageNumber, pageSize);
}

.ToPagedListは、必要なページングとプロジェクトを に適用する拡張メソッドになりますPagedList<T>

世の中には多くの実装がありますPagedList<T>。私はロブ・コネリーのには、ビューに必要なプロパティがあるため、 にバインドしてPagedList<T>HTML ヘルパーを作成し、ページ番号を簡単にレンダリングできます。ページ リストの LINQ 実装に関する唯一の問題は、Count()操作 (レコード数) をサーバー上で実行する必要があるため、2 回のラウンド トリップが発生することです。

私の意見では、これは MVC パターンを破るので、ビューに非マテリアライズド クエリを返すことは望ましくありません。

新しいページに移動するたびに、サービスを呼び出して必要な結果を取得します。

おすすめ記事