0

我目前正在开发一个 MVC 4 应用程序。我计划实现一个命令查询分离模式来提高性能和应用程序的结构。我对我的命令很满意——将我的视图模型映射到我使用的实体,然后使用 nhibernate 来保存我的数据。命令和查询将在同一个数据库上运行。

我有点不确定管理我的查询的最佳方法。在我的上一个项目中,我对所有读取/查询都使用了存储过程,然后使用 automapper 将我的 IDataReaders 映射到我的 ViewModels。这工作正常,但主要问题是编写存储过程的周转时间以及域模型更改存储过程不同步的时间。

因此,理想情况下,我想要从我的视图模型中自动生成视图或存储过程的东西。但实际上,我看不到这样做的方法。由于 Sprocs/Views 需要一些可能不止一张表的知识。因此,仅仅反映 View 模型属性是不够的。我可以为每个视图模型自动生成一个表,在开发过程中读取它,然后一旦域稳定并且在我们去测试之前将它们转换为视图/存储过程?

所以我想我要问的是:

  1. 有没有人设法解决我上面描述的 sproc/view 自动生成问题?(这将是我最喜欢的结果!)或者更好的是设计了一个更优雅的解决方案!
  2. 或者只在绝对必要的地方实现原始 ADO 读取是否更明智——即搜索,并且不需要大量的存储过程/视图。但是仍然将我的查询分离到一个单独的通道中(但其中一些使用 NHibernate,而另一些使用我的 ADO 阅读器)。

(ps我已经查看了其他与stackoverflow CQS相关的问题,我希望我的问题足够不同以保证这个问题)

4

1 回答 1

1

存储过程为您解决了什么问题?为什么你也不能使用 NHibernate 进行读取?NHibernate 产生的查询有那么糟糕吗?

如果读取性能对您至关重要,并且您的视图模型的形状与您存储模型的方式非常不同 - 使视图模型的非规范化过程过于繁重而无法即时执行,您可能必须考虑完全拆分读取和写入.

当你写东西时,你可以引发一个事件——通常是异步完成的——在该事件上,监听的订阅者可以将数据存储在读取端,从而使其最适合读取(接近你的视图模型的形状)。这将使查询非常快。

因为一张图说一千多个字..

在此处输入图像描述

您可以在此处阅读 CQRS 的精彩介绍。

于 2013-06-03T10:38:09.590 回答