如何在Cqrs cirqus中查询数据

时间:2015-07-24 03:33:17

标签: cqrs cirqus

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

中的订单商品列表获取订单

1 个答案:

答案 0 :(得分:2)

我认为您打算链接到the Cirqus demo:)

我主张人们与Cirqus一起使用的方法是只让Cirqus帮助您获取创建和更新的视图数据,然后您自己去查询 - 即没有任何帮助来自Cirqus。

以下是推理:

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

如果Cirqus可以帮助您查询该数据,我们要么必须1)将每个视图数据存储包装在以该数据存储为目标的API中,或者2)创建某种适用于所有数据的抽象商店(例如MongoDB,SQL Server,RavenDB等)。

  1. 会有很多工作并且没有任何好处,至少不会提到所提到的数据存储,因为它们都有很好的.NET客户端API。
  2. 会很愚蠢,因为你会如何使用每个数据存储的特​​定功能?
  3. 因此我的建议如下:让Cirqus帮助您获取您的观点,但是在查询时,您只需使用可用的客户端API(*)

    the demo project中,OrdersView存储在MongoDB(配置为here)中 - 在这种情况下,我会配置我的IoC容器以注入IQueryable<OrdersView>它将解析为viewsMongoDatabase.GetCollection<OrdersView>(typeof(OrdersView).Name).AsQueryable() - 然后我可以这样做:

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

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

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