【发布时间】:2021-02-13 02:17:57
【问题描述】:
假设我通过事件溯源来存储汽车。我有一个 CarAggregate,它可以使用汽车回购正确保存/加载事件:
CarAggregateRepository
{
CarAggregate GetById(Guid id)
{
var events = EventStore.LoadEventsById(id);
var carAggregate = new CarAggregate(id);
carAggregate.ApplyEvents(events);
return carAggregate;
}
void Save(CarAggregate car)
{
EventStore.StoreEvents(car.Id, car.UncommittedEvents);
}
}
我现在想要一种方法来查找与特定查询匹配的汽车,例如,梅赛德斯制造的所有汽车:
List<CarAggregate> Find(string manufacturer)
{
// What goes here?
}
我能想到的唯一方法是:
- 加载所有事件
- 建立所有聚合的列表
- 筛选具有匹配制造商的列表
这肯定是非常低效的,因为我最终可能会从事件存储中加载数十万个单独的事件?这是大量的数据传输。此外,许多加载的聚合可能用于甚至不是 CarAggregates 的东西。也许他们是 UserAggregates,其事件也存储在同一个事件存储中?
我一定错过了什么。如何列出与我的查询匹配的所有 CarAggregates?
【问题讨论】:
-
EventStore 使用的是哪个库?
标签: c# .net cqrs event-sourcing