分页,排序等在存储库模式中的位置?

Sha*_*ean 17 asp.net-mvc repository-pattern asp.net-mvc-3

我们在asp.net存储库模式项目中将数据分页和排序的逻辑放在哪里?

它应该进入服务层还是放在控制器中并让控制器直接调用存储库?Controller - > Repository 在这里显示为jquery网格.

但与该文章不同,我的存储库返回 IQueryable<datatype>

RPM*_*984 25

如果您的存储库返回物化序列(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);
}
Run Code Online (Sandbox Code Playgroud)

.ToPagedList可以是一个扩展方法,将您需要的分页和项目应用于a PagedList<T>.

那里有很多PagedList<T>实现.我喜欢Rob Conery的那个.具有View所需的属性,因此您可以绑定到a PagedList<T>并创建HTML Helper以非常轻松地呈现页码.任何分页列表LINQ实现的唯一问题是Count()需要在服务器上完成操作(对于记录数量),因此导致2次往返.

您不希望将非实现查询返回到View,因为IMO会破坏MVC模式.

每次转到新页面时,请致电您的服务以检索所需的结果.