asp.net – 谁应该负责分页控制器/ domail服务/存储库?
发布时间:2020-12-16 06:50:40 所属栏目:asp.Net 来源:网络整理
导读:我的问题可能对专业人士来说似乎很奇怪,但请考虑到我来自 ruby on rails world =) 所以,我正在学习ASP.NET Core.与rails相比,我喜欢它所看到的内容.但总有那个但是……让我来描述理论问题. 假设我有一个产品型号.并且数据库中有超过9000条记录.很明显,我必须
我的问题可能对专业人士来说似乎很奇怪,但请考虑到我来自
ruby on rails world =)
所以,我正在学习ASP.NET Core.与rails相比,我喜欢它所看到的内容.但总有那个但是……让我来描述理论问题. 假设我有一个产品型号.并且数据库中有超过9000条记录.很明显,我必须对它们进行分页.我已经阅读了this文章,但在我看来这里有些错误,因为控制器不应该直接使用上下文.它必须使用一些存储库(但是为了简单起见,可能以这种方式提供该示例). 所以我的问题是:谁应该对分页负责?它是否应该是从存储库接收一些可查询对象并仅采用它需要的那些记录的控制器?或者它应该是我自己的商业服务吗?或者存储库是否应该具有公共IEnumerable< Product>等方法. ListProducts(int offset,int page)? 解决方法
针对此问题的一个域驱动设计解决方案是使用
Specification.规范设计模式描述对象中的查询.因此,您可以创建一个PagedProduct规范,该规范将接受任何必要的参数(pageSize,pageNumber,filter).然后,您的一个存储库方法(通常是List()重载)将接受ISpecification,并且能够根据规范生成预期结果.这种方法有几个好处.规范有一个名称(而不是一堆LINQ),你可以推理和讨论.它可以单独进行单元测试,以确保正确性.如果您需要相同的行为(例如在MVC View操作和Web API操作上),它可以很容易地重用.
我介绍了Pluralsight Design Patterns Library中的规格模式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – ERR_CONNECTION_RESET:上传大文件时重置了连接
- 一个通过BackgroundWorker实现WinForm异步操作的例子
- asp.net-mvc – 将CSS添加到视图或部分视图
- asp.net-mvc – ASP.Net MVC和WebAPI加密
- asp.net-mvc – 如何使用“?”路由查询字符串以及如何处理
- ASP.NET平台有相当于Heroku吗?
- asp.net-mvc – 使用ASP.NET MVC2中的DataAnnotations显示友
- IIS7 – 一次只能提供一页.这是一个让我crazy!
- 为什么我不能在我的代码asp.net c#中使用app_code中的代码文
- asp.net-mvc-2 – ASP.MVC 2 RTM ModelState Id属性的错误