CQRS读端ORM还是纯ADO.NET?

Posted

技术标签:

【中文标题】CQRS读端ORM还是纯ADO.NET?【英文标题】:CQRS read side ORM or pure ADO.NET? 【发布时间】:2014-03-29 14:59:39 【问题描述】:

我正在使用 CQRS 模式实现我的第一个项目,现在我必须决定如何实现读取端。 我考虑的第一种方法是使用 ORM(实体框架/NHibernate,或者有人可以为这种情况推荐一些更快的 ORM?)并将模型映射到 sql 视图。最初我正在考虑使用索引视图,但我阅读了关于一些性能问题(在写入期间)的文章,这导致我放弃了这个想法(http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/06/02/be-ready-to-drop-your-indexed-view.aspx)。 我考虑的第二种方法是使用纯 ADO.NET(数据读取等)并自己编写 sql。 您认为哪种方法最好?还是有更好的?

【问题讨论】:

【参考方案1】:

我建议使用dapperdotnet 或ormlite。

我已经广泛使用了这两种工具,并且发现每次我转移到旧代码以帮助查询时,我都会重新使用它们。

它们都非常快,并且提供了来自原始 ADO.NET 的足够抽象,使您的代码具有可读性。

总的来说,我不是 ORM 的忠实粉丝,我曾经一直使用它们,但发现 CQRS 让我从使用相同的模型进行读写中解放出来,所以 ORM 有点成为一个巨大的痛苦.

【讨论】:

Mini-ORM 可能是最好的选择。它们适用于平面读取模型,性能非常接近原始 ADO .NET,无需重复的数据读取器映射代码。【参考方案2】:

这实际上取决于您的系统要求。正如@boz 所建议的那样,使用像 Dapper 这样的轻量级对象非常适合您的系统。此外,如果您的写入端相当简单,或者您处理命令以展平数据,您可以使用像 MongoDB 或 Raven(或其他许多)这样的文档存储库,然后让您的读取端拉取对象出去。

同样,这实际上取决于您的要求,但更简单的选择(如轻量级对象映射器或 NoSQL 选项)绝对适合您阅读方面。祝你好运!

【讨论】:

+1 用于提及 NoSql。我经常在读取端混合使用 sql、mongo 和对象缓存 (.net)。 谢谢@boz。我也使用过 Azure 表存储。那是一次有趣的经历。还不错。【参考方案3】:

使用 NHibernate+Fluent 是我用过的最佳组合。干净的方法,非常易于使用。

【讨论】:

以上是关于CQRS读端ORM还是纯ADO.NET?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ORM 的实时项目

c#编写的代码用:linq和传统的ado.net哪个好,出错少,哪个更快,对服务器的负担最小

ADO.NET ORM数据库增删改查封装(工具一)

.net、asp.net、MVC、Ado.Net、EF、ORM、NHibemate之间的关系?

功能类似于 ADO.NET Entity Framework Code First 的 PHP ORM 框架?

减少重复工作,通过泛型反射写一个通用的Ado.net操作数据库的简单orm底层