【问题标题】:Repository pattern's answer to complex / non-model specific queries (i.e. reporting / aggregate data)存储库模式对复杂/非模型特定查询(即报告/聚合数据)的回答
【发布时间】:2013-04-03 21:54:14
【问题描述】:

我一直在阅读 Repository Pattern 并努力寻找关于人们如何处理返回的数据不仅仅是您的标准模型(即不是 Customer 1..* Account)的情况的可靠答案

我正在构建一个分析系统,它返回聚合的数据,有时跨越许多表。此外,这些表中可能有数百万条记录正在连接中。简而言之,我的典型结果集不是我的核心领域模型,而是(有时是极端的)它们的跨度、排列和聚合。

在过去,我只是简单地构建了我的查询并将结果作为自定义结果集返回(授予这允许从我的系统的上层访问 ORM,因此没有将我的系统与 ORM 的知识分开正在使用)。

存储库模式在这里不合适吗?其他人是如何处理这种情况的?感觉有点像方钉/圆孔。

作为参考,我正在使用带有 MSSQL DB 的 ASP MVC 在 C# .Net 中进行开发。

更新

虽然我的方案主要基于报告,但我仍在处理构成报告所基于的数据的各个实体。

作为(只是)一个例子:我仍然需要我的Customer 实体,并且客户仍然需要他们通过系统生成的Orders。在这种情况下,我的域 POCOS 在这里运行良好。在收到 MANY Orders 并且必须以与我现有域对象附近的任何地方都不匹配的格式报告它们以及它们的许多加入的聚合表之后,问题就出现了。

【问题讨论】:

    标签: .net design-patterns domain-driven-design repository-pattern


    【解决方案1】:

    我认为存储库模式不适用于您的场景,尤其是分析数据。当您不仅需要查询而且还需要持久化时,存储库会带来最大的好处。此外,除了某些例外,存储库应该与聚合是一对一的,而不仅仅是任何实体或值对象。

    在您的场景中,您没有理由不能只使用 SQL 查询数据并返回简单的只读对象。您仍然可以通过封装这些查询来获得存储库的一些好处,这样消费者就不需要直接调用 SQL。将它们公开为简单的服务调用。这可以适用于all queries in general

    【讨论】:

    • 感谢您的回复,仅供参考 - 我已经更新了我的问题,以扩展以下事实:系统不仅是严格的报告平台,还涉及与数据相关的“写入”报道。
    • 我链接到的read-model pattern 仍然适用。假设它们都是聚合体,您将拥有一个存储客户和订单的存储库。也看看Effective Aggregate Design
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多