【问题标题】:Net Core Can application have Both Repository and DAO Data Access Object Pattern?Net Core 应用程序可以同时具有存储库和 DAO 数据访问对象模式吗?
【发布时间】:2018-10-02 07:15:20
【问题描述】:

我读过 Repositories 不应该使用 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);

Entity Framework Repository Pattern why not return Iqueryable?

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

【问题讨论】:

  • 您可以使用here所使用的规范方法

标签: c# asp.net-core repository domain-driven-design asp.net-core-2.0


【解决方案1】:

存储库面向聚合。它返回一个完全构成的聚合,您主要用于交易目的。对您的数据的更改是通过聚合来实现的。您不应该真的查询聚合,因为它们可能不是返回相关/简洁数据的最佳选择。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    相关资源
    最近更新 更多