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 パターンを破るので、ビューに非マテリアライズド クエリを返すことは望ましくありません。
新しいページに移動するたびに、サービスを呼び出して必要な結果を取得します。