域驱动设计 – 在CQRS中,如何将聚合的允许方法列表传递给UI?

前端之家收集整理的这篇文章主要介绍了域驱动设计 – 在CQRS中,如何将聚合的允许方法列表传递给UI?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个聚合根’Order’,它有许多方法在其内部设置其’Status’字段:

>提交
>暂停
>起飞保持
>确认
>取消
>等

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

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

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

例:
PlaceOnHoldCommand导致OrderPlacedOnHoldEvent(除了被放入EventStore之外)由OrderTransitionsEventHandler发布和处理,它将可用转换非规范化为与Order关联的DB表.客户端选择可用的转换并相应地动作(隐藏不可用的按钮或类似的那样).

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

猜你在找的设计模式相关文章