2

我只是想弄清楚如何使用 CQS 更新实体。假设 UI 允许用户更新特定实体的多个属性,并在提交时,在后端创建并调度更新命令。

我不太了解的部分是:

  1. cmd 处理程序是否从调度程序接收消息然后从数据库中检索现有实体,然后将接收到的库存项目属性映射到然后保存?或者
  2. 是否在发送 cmd msg 之前完成了对现有项目的检索,然后将其附加到它(检索到的附加到 cmd 的实体,然后发送)?

我的理解是,CQS 允许稍后更轻松地过渡到 CQRS(如有必要)?那是对的吗?

如果是这种情况,上面 2 的问题是可以从一个看起来与命令/写入模式非常不同的模式检索查询。我错过了什么吗?

4

1 回答 1

3

cmd 处理程序是否从调度程序接收消息,然后从数据库中检索现有实体,然后映射接收到的库存项目属性,然后保存

是的。

如果您想了解,阅读会有很大帮助——并不是说它们一定是耦合的,而是因为很多关于 CQRS 的文献都假设您熟悉 DDD 词汇。

但是命令处理程序的职责的粗略概述是

  1. 加载命令目标的当前状态
  2. 在目标上调用命令
  3. 保留对记录簿的更改

我的理解是,CQS 允许稍后更轻松地过渡到 CQRS(如有必要)?

这不太正确——理解 Meyer 对命令和查询的区别使 CQRS 模式更容易思考,但我不相信这实际上有助于过渡。

如果是这种情况,上面 2 的问题是可以从一个看起来与命令/写入模式非常不同的模式检索查询。我错过了什么吗?

也许 - 查询通常从针对查询优化的模式运行;另一种思考方式是查询返回相同实体的不同表示。

当命令表示和查询表示解耦时,事情可能会变得棘手——也就是最终的一致性。从某种意义上说,你总是在查询过去的状态,但向现在的状态发送命令。因此,您将需要一些机制来处理错误地假设目标仍处于某个先前状态的命令。

于 2016-12-12T16:48:46.967 回答