【发布时间】:2020-10-27 19:04:16
【问题描述】:
两个问题 1)如何对它们之间的聚合和引用进行建模 2) 如何组织/存储事件以便有效地检索它们
以这个典型用例为例,我们有 Order 和 LineItem(它们是聚合,Order 是聚合根)和 Product 聚合。 由于 LineItem 需要知道哪个 Product,所以有两个选项 1) LineItem 直接引用 Product 聚合(这似乎不是最佳实践,因为它违反了聚合作为一致性边界的想法,因为我们可以直接从 Order 更新 Product 聚合聚合)2)然后LineItem只有ProductId。
看起来第二个选项是要走的路……你怎么看?
但是,另一个问题出现了,即构建订单读取/查看模型。在这个 Order 视图模型中,它需要知道哪些产品在 Order 中(即 ProductId、Type 等)。典型的用例是报告,CommandHandler 也可以使用这个 Product 对象来执行逻辑,例如是否有太多特定的产品等。为了做到这一点,鉴于这些数据在两个单独的聚合中,那么我们需要 1 次以上的数据库往返。由于我们使用事件来构建模型,所以伪代码如下所示 1) 对于给定的订单 id (guid, order aggregate id),我们为其加载所有事件; -- 第一次数据库访问 2)然后构建一个Order聚合,那么我们就知道Order中引用了哪个ProductId; 3) 对于 ProductIds 列表,我们为其加载所有事件; -- 第二次数据库访问
如果我们构建一个非常大的对象图(很多不同的聚合),那么最终可能会导致更多的数据库访问(每个都很慢)...您的想法是什么?
谢谢
【问题讨论】:
标签: event-sourcing