2010-11-19 74 views
5

我正在创建一个Web CRUD应用程序,它在处理内部逻辑之后会将事件发布到其他系统以更新其数据。CQRS intent命令事件

我在实现CQRS的第一步中,它听起来很奇怪,我必须创建特定的命令用户的所有可能的意图在窗体中,我只有一个'保存'按钮。这意味着很多命令(针对每个属性或值对象)捕获我的需求中不需要的意图,但在即将推出的项目中需要它。我只是做我的有限上下文所需要的东西的粉丝。

要考虑的另一件事: 我必须使用会话来比较数据是否已更改。在保存数据后伪造数据将隐藏UI中显示错误数据的并发情况。

编辑:我刚刚发现this thread其中Greg Young的表明,一些屏幕只是CRUD并没有什么不好做出更新的默认行为。

回答

6

为什么要使用CQRS?它不适用于所有情况。

具体来说,如果您使用的是CRUD,那么根本就没有理由尝试CQRS。它只是不适合。当用户的意图在UI侧明确捕获并通过有意义的命令传递给服务器时(这不是FieldNameUpdated,而是CustomerRelocatedToNewAddress或CustomerAddressCorrected),CQRS从设计中受益匪浅。这需要在设计中使用域驱动设计方法论)。

+1

我正在那样做。 我的CRUD项目是一个内部“配置工具”,可以在高流量网站上显示正确的数据,所以我需要发布活动。我的完美解决方案是只用DDD实现这个项目,而不是CQRS,并为我的范围内的每个真实意图发布一个事件。该网站应该使用CQRS来实现,因为它将有成千上万的用户。当我的需求只是说'用保存按钮创建表单' – Cesar 2010-11-20 16:35:52

+1

时,我不明白为什么我必须创建如此多的命令如果CQRS的唯一原因是可伸缩性,那么您可以尝试简单些。 I.e .:使用某种内存缓存来减少网站上的负载(或以不强调数据库的方式发布Web视图 - 即:CDN上的JSON),或者调整默认服务器缓存。当项目需要处理其中一些问题时,CQRS通常会出现:处理复杂的业务场景,扩展和具有丰富的BI功能,以适应快速变化的需求。 – 2010-11-20 19:34:15

+0

该场景非常复杂,系统已经与memcache一起运行。我们可以从CQRS实践中获得很多好处,毫无疑问,这个决定将会用CQRS重建。怀疑主要指的是那些围绕网站的小型项目,如果他们应该发送一个大命令或小命令(与事件相同)。所有这些想法都来自具有DDD背景的开发人员,有限的背景和成功的交付。现在我必须编写所有的意图,并处理会话以保持数据的版本。 (顺便说一句,我喜欢读你的博客) – Cesar 2010-11-21 16:56:24