CQS和更新现有实体

时间:2016-12-12 09:03:19

标签: entity-framework cqrs command-query-separation

我只是试图了解如何使用CQS更新实体。假设UI允许用户更新特定实体的多个属性,并且在提交时,在后端创建并分派更新命令。

我不太了解的部分是:

  1. 接收来自调度程序的消息的cmd处理程序然后从数据库中检索现有实体,然后将收到的库存项属性映射到然后保存?或者
  2. 是在调度cmd msg之前完成的现有项目的检索,然后将其附加到该cmd msg上(检索到的实体附加到随后调度的cmd)?
  3. 我的理解是,CQS可以在以后更轻松地过渡到CQRS(如有必要)?那是对的吗?

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

1 个答案:

答案 0 :(得分:2)

  

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

如果你想理解,那么阅读会有很多帮助 - 不是说它们必然是耦合的,而是因为很多关于CQRS的文献假设你是熟悉DDD词汇。

但是命令处理程序的责任概要是

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

    我的理解是,CQS可以在以后更轻松地过渡到CQRS(如有必要)?

    这并不完全正确 - 理解Meyer在命令和查询之间的区别使CQRS模式更容易思考,但我不相信实际上有助于过渡这么多

      

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

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

    当事情变得棘手时,命令表示和查询表示是分离的 - 即最终的一致性。从某种意义上说,你总是在过去查询状态,但是在当前调度命令。因此,您需要有一些机制来处理错误地假设目标仍处于某个先前状态的命令。