CQRS 读取模型端 - 规范化表

Dze*_*ndo 3 cqrs

我一直在阅读关于命令查询职责分离 (CQRS) 以及这种模式如何适合我们当前的应用程序。

说到读模型,我很清楚这些概念:“分离读写数据模型”,“薄读层返回的扁平化非规范化数据”。在大多数情况下,我们使用相同的数据库(相同的读/写数据模型),在 SQL Server 上使用规范化表运行,并在其上使用通用分层应用程序。

那么,在这种场景中应用 CQRS 有什么价值吗?如果是这样,那么在读取模型方面会是什么?

另一个让我想到的问题是 MVC 应用程序从我的薄读取层请求信息,这些信息暴露了扁平化的视图。暴露的数据在呈现给用户之前仍然需要结构化(聚合),还是我错了?

此致

Dav*_*ter 5

CQRS 不需要扁平化读取模型;这是 CQRS 可以让您提供的好处,但它既不是必需的,也不是该方法的关键部分。

CQRS 是关于分离(或分离,如果您遵循名称)。这是类固醇上的命令查询分离原则(在我看来)。它为您提供的好处(在我的脑海中)是:

  • 将读操作与写操作分开;
  • 通过消息传递(例如命令、事件)在层之间进行通信,使您的层保持干净;
  • 在您的层中分离,应用单一职责原则(例如,您的域应用业务逻辑,您的命令处理路由命令,您的非规范化程序或事件处理程序(或您称之为的任何东西)将信息保存到您的读取存储等)
  • 允许您让团队成员在应用程序的不同部分工作,而没有他们之间的硬依赖;
  • 等等。

因此,如果上述内容对您很重要或您想要争取的东西(并且您的应用程序的设计支持实现 CQRS),那么 CQRS 将为您提供好处和价值。

CQRS 有很多好处。这不是每个问题的正确解决方案,但是当星星对齐时,它是解决您问题的好方法(即使您没有非规范化的读取存储、事件存储或异步模型等)。

我希望这有帮助!