在CQRS中,如何将关于aggrregate的允许方法列表传递给UI?

Jos*_*off 5 domain-driven-design cqrs

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

  • 提交
  • 搁置
  • 起飞保持
  • 确认
  • 取消
  • 等等

可用的操作取决于订单的当前状态(例如,如果它已经处于暂停状态,则不能将其置于保持状态).问题是我需要提供一个查询来告诉UI哪些命令是可用的,这样我就可以隐藏原本会抛出的操作InvalidOperationException.

如何以最小的DRY违规执行此操作?

kst*_*uch 4

最简单的解决方案是投影当前状态以及可用于读取/查询模型的转换,并选择它以及要显示的数据。

示例: 发布和处理PlaceOnHoldCommand的结果OrderPlacedOnHoldEvent(除了放入EventStoreOrderTransitionsEventHandler之外),通过该结果对与 Order 关联的数据库表的可用转换进行非规范化。客户端选择可用的转换并进行相应的操作(隐藏不可用的按钮或类似的东西)。

这当然是选项之一。但不要指望不会有任何重复。CQRS 有助于管理复杂性,有时这意味着会发生轻微的 DRY 违规。