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

标签 domain-driven-design cqrs

我有一个聚合根“Order”,它有许多内部设置其“状态”字段的方法:

  • 提交
  • 暂停
  • 起飞等待
  • 确认
  • 取消

  • 可用的操作取决于订单的当前状态(例如,如果它已经被搁置,则不能搁置)。问题是我需要提供一个查询来告诉 UI 哪些命令可用,以便我可以隐藏否则会抛出 InvalidOperationException 的操作。 .

    我如何以最小的 DRY 违规来做到这一点?

    最佳答案

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

    例子:PlaceOnHoldCommand结果 OrderPlacedOnHoldEvent其中(除了放在 EventStore 中)由 OrderTransitionsEventHandler 发布和处理它将可用转换非规范化到与 Order 关联的数据库表。客户端选择可用的转换并相应地采取行动(隐藏不可用的按钮或类似的东西)。

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

    关于domain-driven-design - 在 CQRS 中,如何将聚合上允许的方法列表传达给 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7276396/

    相关文章:

    java - 领域逻辑 - 读取模型

    domain-driven-design - 事件验证

    domain-driven-design - DDDD:事件数据

    cqrs - CQRS 中单个进程的多个命令

    web-services - 如何在 DDD 中处理外部有状态的 Web 服务?

    GraphQL 和 CQRS View

    c# - 如何通过除ID以外的其他属性查询聚合根?

    c# - MVC - WCF - RabbitMQ - 通过消息队列到消费者的域事件加速或替代方案?

    domain-driven-design - Java 9 模块和 DDD 中的双重调度

    domain-driven-design - Translation 和 AntiCorruption 层之间的实现差异