存储库模式中的分页、排序等在哪里?

2024-03-31

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

应该放在服务层还是放在控制器中,让控制器直接调用存储库?显示控制器 -> 存储库here http://highoncoding.com/Articles/566_JQuery_jqGrid_Export_to_Excel_Using_ASP_NET_MVC_Framework.aspx对于 jquery 网格。

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


如果您的存储库返回物化序列(ICollection<T>, List<T>), etc.

但如果你回来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>那里的实施。我喜欢罗布·康纳利的一个 http://www.squaredroot.com/2008/04/08/updated-pagedlist-class/。具有您的视图所需的属性,因此您可以绑定到PagedList<T>并创建一个 HTML Helper 来非常轻松地呈现页码。任何分页列表 LINQ 实现的唯一问题是Count()操作(记录数)需要在服务器上完成,因此会导致 2 次往返。

您不希望将非具体化查询返回到您的视图,因为 IMO 这打破了 MVC 模式。

每次转到新页面时,调用您的服务来检索所需的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储库模式中的分页、排序等在哪里? 的相关文章

随机推荐