【问题标题】:Event Storming Events?事件风暴事件?
【发布时间】:2022-08-20 12:30:05
【问题描述】:

我在 Event Storming 或 DDD 中有一个问题,是否所有命令都应该触发一个聚合然后是一个事件,或者每个命令是否都必须有一个聚合?

例如:

  • 创建订单(命令)-> 购物篮中至少一项(聚合)-> 添加订单(事件)
  • 创建订单(命令)->添加订单(事件)

我们可以有第二个示例还是所有命令都必须像第一个示例一样转到聚合?我知道这可能取决于上下文,但它是强制性的吗?

  • 非强制性(对于 DDD 和 CQRS);与大多数事物设计一样,有好处也有坏处,其中一部分工作就是做出良好的权衡。

标签: domain-driven-design cqrs event-storming


【解决方案1】:

您首先需要了解事件是由聚合引发的。它们是聚合修改(状态变化)的结果,因此不会受到命令的直接影响。

弄清楚这一点,将事件视为总体变化。命令触发改变的可能性。但是,如果没有发生变化,那么就没有事件。

考虑你的例子,

创建订单(命令)-> 购物篮中至少一项(聚合)-> 添加订单(事件)

我将其重写为:

Create Order (command) -> Create Order Service (domain) :  
    When (at least one item in basket) (invariant)  
    Then return Order (Order with Order Created Event raised within aggregate)

在上述情况下,当不变量失败(篮子中没有项目)时,不会创建订单,导致没有事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多