art*_*sow 4 asp.net asp.net-mvc asp.net-core-mvc asp.net-core
我的问题可能对专业人士来说似乎很奇怪,但请考虑到我来自ruby on rails world =)
所以,我正在学习ASP.NET Core.与rails相比,我喜欢它所看到的内容.但总有那个但是......让我来描述理论问题.
假设我有一个Product模型.并且数据库中有超过9000条记录.很明显,我必须对它们进行分页.我已经读过这篇文章了,但在我看来这里出了问题,因为控制器不应该context直接使用.它必须使用一些存储库(但是为了简单起见,可能以这种方式提供该示例).
所以我的问题是:谁应该对分页负责?它是否应该是从存储库接收一些可查询对象的控制器并仅采用它需要的那些记录?或者它应该是我自己的商业服务吗?或者存储库是否应该有类似的方法public IEnumerable<Product> ListProducts(int offset, int page)?
针对此问题的一种域驱动设计解决方案是使用规范.规范设计模式描述了对象中的查询.因此,您可以创建一个PagedProduct规范,该规范将接受任何必要的参数(pageSize,pageNumber,filter).然后,您的一个存储库方法(通常是List()重载)将接受ISpecification,并且能够根据规范生成预期结果.这种方法有几个好处.规范有一个名称(而不是一堆LINQ),你可以推理和讨论.它可以单独进行单元测试,以确保正确性.如果您需要相同的行为(例如在MVC View操作和Web API操作上),它可以很容易地重用.
我介绍了Pluralsight设计模式库中的规范模式.
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |