Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design 在CQRS中,如何将聚合上允许的方法列表传递给UI?_Domain Driven Design_Cqrs - Fatal编程技术网

Domain driven design 在CQRS中,如何将聚合上允许的方法列表传递给UI?

Domain driven design 在CQRS中,如何将聚合上允许的方法列表传递给UI?,domain-driven-design,cqrs,Domain Driven Design,Cqrs,我有一个聚合根“Order”,它有许多方法,可以在内部设置其“Status”字段: 提交 搁置 起飞等待 证实 取消 等等 可用操作取决于订单的当前状态(例如,如果订单已处于保留状态,则无法将其置于保留状态)。问题是我需要提供一个查询来告诉UI哪些命令可用,这样我就可以隐藏操作,否则会引发invalidooperationexception 如何将干冲突降至最低?最简单的解决方案是将当前状态和可用转换投射到读取/查询模型,并将其与要显示的数据一起选择 例如: PlaceOnHoldComma

我有一个聚合根“Order”,它有许多方法,可以在内部设置其“Status”字段:

  • 提交
  • 搁置
  • 起飞等待
  • 证实
  • 取消
  • 等等
可用操作取决于订单的当前状态(例如,如果订单已处于保留状态,则无法将其置于保留状态)。问题是我需要提供一个查询来告诉UI哪些命令可用,这样我就可以隐藏操作,否则会引发
invalidooperationexception


如何将干冲突降至最低?

最简单的解决方案是将当前状态和可用转换投射到读取/查询模型,并将其与要显示的数据一起选择

例如:
PlaceOnHoldCommand
生成
OrderPlacedOnHoldEvent
,该事件(除了放在EventStore中)由
OrderTransitionsEventHandler发布和处理,它将与订单关联的DB表的可用转换反规范化。客户端选择可用的转换并相应地进行操作(隐藏不可用的按钮或类似的东西)


这当然是一种选择。但是,不要指望会有任何重复。CQR有助于管理复杂性,有时这意味着会发生轻微违反DRY的情况。

+1-同意。没什么可补充的了——这就是你要做的,这很性感!谢谢