【问题标题】:Event Sourcing - stream design事件溯源 - 流设计
【发布时间】:2021-03-08 20:54:11
【问题描述】:

我坐在这里研究 CQRS 和事件溯源,这些非常有趣的话题。当谈到流设计和聚合根时,我觉得有点不知所措。你是怎么做到的?

假设我有一个 UI,我可以在其中向篮子添加东西,在篮子中生成一条线。

我会不会:

  1. 一个流公关篮子(附有基本信息,如运输详细信息、姓名、电子邮件等)
  2. 流公关篮筐

所以我会有很多流

  • streams/basket-[basketid]
  • streams/basketline-[basketid]

基本上我只通过网络发送最少的数据。

或者我只是有一个流

  1. 流/篮子-[basketid]

每次我在我的篮子中添加一条线时,我都会将整个篮子通过电线发送。

据我了解,最好有一对多流,而不是一个大流/篮子流。还是我在这里也弄错了?

我的重点是流。这种设计的任何“最佳实践”:链接、书籍等都将得到应用。

【问题讨论】:

    标签: cqrs event-sourcing


    【解决方案1】:

    你是怎么做到的?

    首先观看 All Our Aggregates are Wrong(Mauro Servienti,2019 年),它考虑了您可能需要多少不同聚合来表示数字购物车的问题。


    我倾向于将聚合视为信息图 - 如果两条信息必须一起更改(A 更改,因此 B 也必须立即更改;或者 A 不能更改,因为其允许值的范围受到限制由 B),那么它们属于同一个聚合。聚合的边界将紧密耦合在一起的信息与其他所有信息分开。

    因为分布式事务很困难,所以我们希望我们的聚合以这样一种方式存储,即更改聚合只需要持有一个锁。例如,我们通常不会将聚合的单个实例分布在多个数据库中,因为确保所有数据库在“同一”时间以完全正确的方式更改真的很难。

    出于完全相同的原因,我们通常将所有紧密耦合在一起的信息存储在一个事件流中:只需管理一个锁。

    【讨论】:

    • 感谢您的链接。我会看的。我在电子商务领域工作,所以我知道篮子的复杂性。我对流的假设是否正确?我们使用流公关篮子吗?也就是说,拥有streams/basket-[basket_id](可能还有streams/basket-lines-[basket_id]),而不仅仅是streams/basket,是不是一个很好的模式。
    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2020-02-01
    相关资源
    最近更新 更多