事件采购和重建逻辑

时间:2012-05-28 09:01:55

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

我是事件采购的新手,我对从事件Stream重建对象感到困惑。

我认为我们需要运行加载从时间顺序发生的所有事件来重建对象状态。所以对于例子

如果我有一个对象叫客户。

Public class Customer
{
   public void Correctname(string firstName,string lastName)
    {
        CustomerNameChanged(new nameChangedEvent(firstName,lastName);
    }
}

如果客户更改了名称两次,我们将在事件日志中将事件存储两次,当我将事件重建为对象时,我将获得两次事件。是否需要参加上一次活动或宣布活动,以便我们不再重播最后一次活动

2 个答案:

答案 0 :(得分:3)

您可以将这两个事件重新应用于Customer对象。因为按时间顺序应用它们,Customer对象将处于正确的当前状态。如果您担心应用的事件数量不再代表当前状态,您应该查看Snapshots

答案 1 :(得分:1)

重建对象时,您将处理该对象的整个事件流。性能方面,这通常不是一个问题,即使对于大量事件也是如此。您可以使用Rolling Snapshots来缓解此问题。

使用快照,您可以将对象的状态存储在事件流的特定点。重建只是加载快照+拍摄快照后发生的事件。