如何在Cqrs cirqus中查询数据

How to query data in Cqrs cirqus

我使用 d60/Cirqus 查看示例 SqlsugCirqusDemo。我想知道如何编写查询部分。比如我想通过orderid获取订单或者orderby id

中的订单商品列表

我假设你是想 link 到 the Cirqus demo :)

我提倡人们使用 Cirqus 的方法是只让 Cirqus 帮助您创建和更新视图数据,然后您自己去查询它- 即没有 Cirqus 的任何帮助。

推理如下:

如果您让 Cirqus 帮助您在某些特定数据存储(例如 SQL 服务器)中创建视图,可能是因为您想使用该数据存储的某些功能(例如聚合、连接等) .

如果 Cirqus 也可以帮助您查询该数据,我们要么必须 1) 将每个视图数据存储包装在一个针对该数据存储的 API 中,要么 2) 创建某种抽象这适用于所有数据存储(例如 MongoDB、SQL 服务器、RavenDB 等)。

  1. 会做很多工作并且不会带来任何好处,至少对于提到的数据存储而言不会,因为它们都有很好的 .NET 客户端 APIs。
  2. 会很傻,因为您将如何使用每个数据存储的特​​定功能?

因此,我的建议是:让 Cirqus 帮助您获得合适的视图,但在查询时,您只需使用可用的客户端 API(*)

In the demo project, the OrdersView is stored in MongoDB (which is configured here) - 在这种情况下,我将配置我的 IoC 容器以注入一个 IQueryable<OrdersView> 它将解析为 viewsMongoDatabase.GetCollection<OrdersView>(typeof(OrdersView).Name).AsQueryable() - 然后我可以这样做:

var order = orders.First(o => o.Id == orderId);

这使得一些非常干净的 C# 完全不受持久性问题的污染,并且可以根据需要进行简单的单元测试。


(*) 但是,我可以推荐 MongoDB 作为视图数据存储 :) 它可以在数据库中存储一些不错的丰富对象,同时允许您在以下情况下使用 IQueryable<YourView>是时候检索数据了(尽管您需要使用 1.10 版或等到 MongoDB 驱动程序的 2.1 版才能执行此操作 - Cirqus 的 MongoDB 集成当前使用 1.10)