【问题标题】:CQRS Matching Events and CommandsCQRS 匹配事件和命令
【发布时间】:2013-04-09 00:01:19
【问题描述】:

我开始使用 CQRS,我发现我的 Event 类定义与我的 Command 定义几乎 1 比 1 匹配。除了明显的代码重复之外,我试图找出我做错了什么。当然也有一些事件与命令不匹配的情况......但并不多。

以简单的 CUD 场景为例:

命令类:

  • 创建帖子
  • 更新发布
  • 删除帖子

事件类:

  • 已创建帖子
  • 更新帖子
  • 已删除帖子

对此有何建议?

我正在使用事件存储,如果这有什么不同的话。

谢谢。

【问题讨论】:

  • 你能详细说明一下吗我正试图找出我做错了什么。你为什么认为有问题?
  • 因为我似乎在完全复制代码而没有什么好处。

标签: .net cqrs event-sourcing


【解决方案1】:

您通常不会将 CQRS 用于 CRUD 场景。有更简单的工具和模式来创建 CRUDy 应用程序。

CQRS 为行为丰富的场景带来了许多优势,其中动词不是创建、读取、更新、删除,而是类似于真实行为。喜欢 PromoteEmployeeBlacklistVendor

一旦您开始对行为丰富的域进行建模,可能仍然会有许多相关的命令/事件 - 这不是一件坏事 - 但您也会发现命令和生成的事件在大小上可能会有很大的不同(包含的数据)和数字。

【讨论】:

  • 我用上面的作为一个简单的例子。上面的 CUD 操作是更大的有界上下文的一部分,其中也包括更复杂的命令。即使在那里,我发现我的事件大多是我的命令的重复。
  • @Jeff 仍然不是一件坏事。您希望某事发生(命令),然后发生(事件)。在许多情况下,这种重复只是现实的反映。在这种情况下,引入诸如重用之类的东西没有任何意义,因为它与解耦系统各部分的想法相矛盾。
  • @Jeff 很不幸你选择了 CRUD 作为你的例子,这真的让谈话脱轨了。
【解决方案2】:

为了在 Dennis Traub 的回答中添加一点内容,CQRS 超越了您如何将代码构建到规范领域,即 UI 的工作方式。并不是所有的 UI 都对 CQRS 友好;你想要更多类似Task-based-UI's rather than CRUD-y UI's 的东西。

从 CRUD-y UI 开始,您在应用 CQRS 时可能会感到沮丧。

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2017-04-21
    相关资源
    最近更新 更多