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

Net Core Can application have Both Repository and DAO Data Access Object Pattern?

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

所以问题是,

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

(b) 这不会绕过拥有 DDD 存储库模式的全部要点吗?

如何在访问存储库的同时访问具有复杂请求的 ProductTable?第一次存储库查询会很慢。

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);

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

A repository 面向聚合。它 returns 一个完全构成的聚合体,您主要将其用于交易目的。对数据的更改是通过聚合来实现的。您不应该 真的 查询聚合,因为它们可能不是返回 relevant/concise 数据的最佳选择。

一个查询层是一个读取模型,returns只有尽可能轻量级的机制中的相关数据。您可能将其视为 DAO,但它实际上并不是一回事,尽管它肯定专注于 数据 检索。

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

由于这两种机制之间的意图如此不同,因此拥有查询机制绝不会削弱存储库的实用性。