繁体   English   中英

存储库模式对复杂/非模型特定查询(即报告/聚合数据)的回答

[英]Repository pattern's answer to complex / non-model specific queries (i.e. reporting / aggregate data)

我一直在阅读存储库模式,并努力找到一个可靠的答案,人们如何处理返回的数据不仅仅是您的标准模型(即非Customer 1..* Account )的情况

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

在过去,我只是构建了我的查询并将结果作为自定义结果集返回(授予此权限可以从我的系统上层访问ORM,因此不会将我的系统与正在使用的ORM的知识分开) 。

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

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

UPDATE

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

作为( JUST )的一个例子 :我仍然需要我的Customer实体,并且该客户仍然需要通过系统生成Orders 在这种情况下,我的域POCOS在这里工作得很好。 在收到许多Orders并且必须以与我现有域对象附近的任何地方都不匹配的格式报告它们以及它们的许多连接聚合表时,会出现此问题。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM