【发布时间】:2018-10-03 17:45:03
【问题描述】:
我正在涉足事件溯源模式并试图理解聚合。我已经阅读了一些博客,现在我比以往任何时候都更加困惑。
据我推断,聚合应该以某种方式使用户能够在事件存储上运行不同的查询来检索不同的事件流。
用例:
我想重播发票上的事件,我想查看特定员工在余额中执行的所有操作。
我想重播发票上的所有事件
我希望这些是有效的用例。
活动商店:
| event_id | invoice_id | EmployeeId | Event | Payload |
|----------|------------|------------|------------------|---------|
| 1 | 12345 | 12345 | Invoice_InReview | JSON |
| 2 | 12345 | 12345 | Invoice_Billed | JSON |
| 3 | 12345 | 45567 | Invoice_Paid | JSON |
| 4 | 12345 | 77341 | Invoice_Reversed | JSON |
| 5 | 12345 | 98421 | Invoice_Paid | JSON |
JSON 包含有关付款更改、调整和发票状态的信息 状态为(Review,Billed,Paid)
所以据我了解,需要 5 个组件。
- 事件 - 特定事件。
- 事件源 - 调用 repo 获取相关事件的服务
- 事件流 - 事件列表
- 命令 - 发票请求操作
- 聚合 - 决定加载事件输入的 api
我了解其他事物是如何发挥作用的,但我很难理解 Aggregate。这是什么?
我会有两个聚合类
- AggregateEventsByInvoice
- AggregateEventsByInvoiceEmployee
我真的很难弄清楚 aggregate 的需求和用途。我见过的所有示例都使用 UUID,这对我来说根本没有意义?任何帮助将不胜感激。
【问题讨论】:
-
在领域驱动设计 (DDD) 的上下文中是否使用了“聚合”一词?
-
@ConstantinGalbenu 是的,这里的聚合是指 DDD。
标签: java aggregate microservices event-sourcing