哪种数据访问技术最适合CQRS查询Web服务?

时间:2011-02-25 11:05:59

标签: c# cqrs

人们使用什么工具查询他们的Read数据库并填充DTO?

我们目前在Sql2008数据库中拥有Read模型并通过WCF服务执行所有查询,我们使用Fluent NHibernate使用自动映射填充数据合同,但这可能只是矫枉过正?

我们的要求就是这个......

  1. Webservice中没有Sql代码
  2. Webservice中没有映射代码,理想情况下我们希望按约定映射,Read数据库字段与我们的Data契约属性具有相同的名称。我们不想手工编写和维护映射代码。
  3. 网络服务器上的资源使用最少。

3 个答案:

答案 0 :(得分:3)

恕我直言,Overkill。

我只使用带有JSON / ProtoBuf序列化的平面文件系统。 Web服务很简单,架构可以是任何东西。堆栈可以根据需要轻松移动到云(使用Azure存储Blob),实现几乎无限的可扩展性。

详细信息:http://abdullin.com/journal/2011/1/19/scalable-and-simple-cqrs-views-in-the-cloud.html

答案 1 :(得分:1)

我在阅读方面使用了WCF数据服务并取得了很大成功。我写了一篇关于它的博客文章。请查看http://blog.fossmo.net/post/WCF-Data-Services-A-perfect-fit-for-our-CQRS-implementation.aspx

答案 2 :(得分:0)

我在数据库中使用了ADO.NET核心和存储过程。 然后使用我编写的工具,使用每个存储过程的结果作为Dtos的结构生成所有数据访问代码。

我的博客上提供了带有源代码的工具 Data Access Layer CodeGen

既然你只是通过WCF服务返回数据,那么就没有必要去了 DataReader,到Dto然后序列化DTO。换句话说,在发送数据的过程中,您将对结果集进行3次迭代。因此,如果您想降低服务器上的资源利用率并获得更好的性能,那么您可以使用该工具生成的“DataReader-Wrapper”类(以及数据访问代码)。

DataReader包装类与强类型DataReader类似。我有另一篇文章,我谈到这些及其好处 DataReader Wrappers - TypeSafe

当然,您可以修改工具(因为您也有源代码)来生成所有代码,包括WCF服务。所以你真正需要做的就是编写一个存储过程,你就完成了。所有的DataAccess代码(使用ADO.NET Core - 所以它的轻量级和超快速),业务层代码和WCF代码实际上只是“忙碌的工作”,如果你理解我的意思。

修改 使用存储过程的原因

  1. 存储过程可以返回 一次调用中有多个结果集。
  2. 存储过程可以接受 参数。
  3. 存储过程可以 有控制流程声明,可以 调用其他存储过程(所以你 得到程序重用类似 重构一个方法,使你 可以从多个其他人那里调用它 方法)。
  4. 优化存储过程要容易得多,因为工具可以很好地与它们配合使用