加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – IQueryable和存储库 – 需要2?

发布时间:2020-12-16 07:22:56 所属栏目:asp.Net 来源:网络整理
导读:我不得不承认我一直在携带“存储库不应该返回IQueryable”的横幅,因为它更难测试.我受到了 this和 this等其他问题的答案的影响. 今天早上我一直在阅读ScuttGu关于ASP.NET vNext的博客,在那里他使用SelectMethod详细介绍了Model Binding,它似乎依赖于IQueryab
我不得不承认我一直在携带“存储库不应该返回IQueryable”的横幅,因为它更难测试.我受到了 this和 this等其他问题的答案的影响.

今天早上我一直在阅读ScuttGu关于ASP.NET vNext的博客,在那里他使用SelectMethod详细介绍了Model Binding,它似乎依赖于IQueryable进行分页和排序.

您认为这会迫使我们重新考虑IQueryable在存储库中扮演的角色吗?

解决方法

DDD Repository应该封装数据访问技术性:

Definition: A Repository is a mechanism for encapsulating storage,
retrieval,and search behavior which emulates a collection of objects.

它还负责处理域对象的中间和寿命结束.存储库接口属于Domain,应尽可能基于Ubiquitous Language.除了DDD书之外,这两篇文章几乎涵盖了设计存储库时需要了解的所有内容:

> How To Write A Repository
> The Generic Repository

在我看来,在Repository接口上公开IQueryable并不是最佳选择. IQueryable不是普适语言的一部分.这是一个技术性,它没有域意义.而不是封装数据检索Repository会暴露裸数据访问机制,这基本上会破坏首先拥有Repository的目的.

关于ASP.NET.这是一个UI框架.为什么允许UI框架影响域模型的设计? Microsoft的例子经常鼓励将UI数据网格直接绑定到数据库表.或者,最近,控件绑定到所谓的域模型,而实际上是Anemic Model,或者只是带有gets / sets的哑数据容器.你提到的那篇文章的引用(我强调一下):

Model binding is a code-focused approach to data-binding. It allows
you to write CRUD helper methods within the code-behind file of your
page,and then easily wire them up to any server-controls within the
page. The server-controls will then take care of calling the methods
at the appropriate time in the page-lifecycle and data-bind the data.

我对此的解释是抛弃模型和对象,只是将数据绑定到UI.在很多情况下,这可能是一种有效且合理的方法.但由于问题被标记为DDD,我会说在DDD中这称为Smart UI Anti-Pattern.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读