首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Net应用程序可以同时拥有存储库和DAO数据访问对象模式吗?

Net应用程序可以同时拥有存储库和DAO数据访问对象模式吗?
EN

Stack Overflow用户
提问于 2018-10-02 07:15:20
回答 1查看 1.5K关注 0票数 0

我读过存储库不应该使用IQueryable。简单的存储库示例有ListAll、FindById、Add、Delete。下面是一个示例产品库ListAll。如果我不能覆盖查询,并且需要搜索查询,例如,按类别划分的ProductTable或按权重计算的ProductTable (复杂的查询),那么我将需要DAO (数据访问对象模式)。

所以问题是,

(a)在同一个应用程序中使用存储库模式和DAO模式可以吗?

(b)这是否绕过了拥有DDD储存模式的全部意义?

如何访问具有Intriciate请求的ProductTable,同时仍在浏览存储库?第一个存储库查询将很慢。

代码语言:javascript
复制
public virtual IEnumerable<Products> List()
{
    return _dbContext.Products.AsEnumerable();
}

// This repository pattern will be slow, first it access all product and Then filters

var result = context.products()
               .Where(o => o.ProductCategoryId== 5);


// This is dao pattern, with more specific queries

var result = context.products.AsEnumerable()
               .Where(o => o.ProductCategoryId== 5);

Entity Framework Repository Pattern why not return Iqueryable?

https://deviq.com/repository-pattern/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-02 10:36:08

存储库面向聚合。它返回一个主要用于事务目的的完全组成的聚合。对数据的更改是通过聚合实现的。您不应该真正地查询聚合,因为它们可能不是返回相关/简明数据的最佳方法。

查询层是一个读取模型,它在尽可能轻量级的机制中只返回相关数据。您可能认为这是一个DAO,但是它实际上并不是一回事,尽管它非常肯定地关注于数据检索。

从这个意义上说,你提议的是i.t.o.。这两种机制不仅是可行的,而且我强烈建议您这样做:)

由于这两种机制之间的意图是如此不同,使用查询机制绝不会降低存储库的有用性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52603576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档