【发布时间】:2017-02-13 09:52:44
【问题描述】:
我的问题对于专业人士来说可能看起来很奇怪,但请注意我来自 ruby on rails world =)
所以,我正在学习 ASP.NET Core。与rails相比,我喜欢我在其中看到的东西。但是总有这样的,但是...让我描述一下理论问题。
假设我有一个Product 模型。数据库中有超过 9000 条记录。很明显,我必须对它们进行分页。我已经阅读了this 文章,但在我看来这里有些问题,因为控制器不应该直接使用context。它必须使用一些存储库(但为了简单起见,可能会以这种方式提供该示例)。
所以我的问题是:谁应该负责分页?控制器应该从存储库接收一些可查询的对象并只获取它需要的那些记录吗?还是应该是我自己的业务服务做同样的事情?或者存储库是否应该有类似public IEnumerable<Product> ListProducts(int offset, int page) 的方法?
【问题讨论】:
-
如果您不返回可查询列表,那么存储库看起来肯定是个好地方。也许您可以添加页面和 pageSize 可以由控制器或业务服务上的某些选项处理:-)
-
这取决于您的架构。如果你从你的存储库返回
IQuariable<T>- 你真的可以在任何你想要的地方进行分页。如果没有 - 最好让您的分页尽可能靠近您的数据库。 -
@teovankot 从存储库返回
IQueryable<T>是一个好/可接受的主意吗? -
当然。 Linq 旨在简化您的生活,而不是不使用它。还要意识到,只要您的数据库层支持 linq(以将其转换为 SQL 而不仅仅是 linq-to-already-loaded-objects 的形式),那么 LINQ is 实际上是一种抽象层。他们通常告诉不要直接使用上下文的原因是因为您希望您的控制器独立于存储机制。例如,如果微软停止了实体框架并且你需要使用其他东西,如果与 EF 相关的代码没有分散在所有代码中,那么重构的范围就会更小
标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc