据我所知,CQRS主张将阅读模型与领域模型分开,并为每个必要的领域模型投影设置特定的阅读模型。
从使用角度来看,读取模型的存储和检索方式应该是透明的 - 您可以发出查询并获取读取模型,而无需关心它是如何制作的。
许多示例和文章使用单独的表来存储读取模型,并通过响应域模型更改来重新生成它们。
由于以下原因,我不太喜欢这种做法:
基于此,我正在考虑使用查询服务:
另外我看到有人建议将阅读模型存储为blob。将读取模型存储为blob的问题在于,如果您需要搜索它们,则需要提取索引属性,如果需要全文搜索,甚至必须以全文可以理解的格式存储它们工具。
正如您所看到的,我基本上希望只有查询执行后才能读取存在的模型,而不是基于域更改事件生成的模型。这个解决方案对CQRS是否可以接受?我正在研究CQRS的原因是通过将可缓存的视图模型与用户操作处理分离来改进应用程序体系结构,在用户操作之后使用支持AJAX的Web应用程序进行异步更新,并通过将业务逻辑全部放在一起来减少初级开发人员生成不可维护代码的空间对我来说甚至非忠实地实施CQRS似乎是向正确的方向迈出的一步。
答案 0 :(得分:11)
CQRS不要求读取模型存储在单独的表中(如果使用文档数据库,则存储在文档中),尽管这通常是一种很好的方法,并且与事件源相结合可以很好地工作。例如,数据库视图或ORM查询可以支持读取模型 。
将CQRS引入遗留系统的某些部分时,这可能是一种很好的方法。
之前已经建议过你建议的方法,例如参见this post by Ayende;我认为它被称为“瘦读模型”或类似。我会说去吧。
您可能有兴趣阅读