Jos*_*off 5 domain-driven-design cqrs
我有一个聚合根'Order',它有许多方法在其内部设置其'Status'字段:
可用的操作取决于订单的当前状态(例如,如果它已经处于暂停状态,则不能将其置于保持状态).问题是我需要提供一个查询来告诉UI哪些命令是可用的,这样我就可以隐藏原本会抛出的操作InvalidOperationException.
如何以最小的DRY违规执行此操作?
最简单的解决方案是投影当前状态以及可用于读取/查询模型的转换,并选择它以及要显示的数据。
示例:
发布和处理PlaceOnHoldCommand的结果OrderPlacedOnHoldEvent(除了放入EventStoreOrderTransitionsEventHandler之外),通过该结果对与 Order 关联的数据库表的可用转换进行非规范化。客户端选择可用的转换并进行相应的操作(隐藏不可用的按钮或类似的东西)。
这当然是选项之一。但不要指望不会有任何重复。CQRS 有助于管理复杂性,有时这意味着会发生轻微的 DRY 违规。