EventStore预测何时使用它们

时间:2017-01-03 09:30:05

标签: javascript get-event-store

我现在一直在关注Event Store,有一件事让我感到困惑的是应该何时考虑写一个投影?通常的做法是创建扁平投影吗?

  

此处的设置是使用每个聚合的流

例如,假设我有2个看起来像这样的事件:

public class OrderPlaced
{
    public OrderPlaced(string reference, Currency currency, Amount amount)
    {
        ...
    }

    public string Reference { get; }

    public Currency Currency { get; } //Custom type

    public Amount Amount { get; } //Custom type
}

public class OrderCompleted
{
    public OrderCompleted(string reference)
    {
        this.Reference = reference;
    }

    public string Reference { get; }
}   

我有以下查询:

fromCategory('MyCategory')
  .whenAny(function(s, e) {
      linkTo("Foo", e);
  })

以上内容并没有太大的作用,只会将所有流聚合成单数。是否可以投影更平坦的视图,例如像这样的东西?也许我的电线越过了,但显然使用emit可以达到这个目的?

{
    string Reference;
    string CurrencyCode;
    decimal PayingAmount;
}

我的想法是,一旦我写入流,我可以保证聚合处于有效状态,因此对于任何感兴趣的各方,我应该只公开这些进程所需的字段。投射一个简单的模型(一个去除了非正规化的视图)是正确的事情。

以上是一个简单的例子,但你可以想象聚合更复杂一点。

如果我遗漏了任何内容或需要进一步澄清,请发表评论,我可以补充一下。

1 个答案:

答案 0 :(得分:1)

您正在寻找标准的活动类别预测。

它将链接事件发送到名为'$ ce-'的steam。那里的类​​别是你的对象类型。

例如,您的聚合类型为Order,您可以将事件OrderCreatedOrderLineAdded等写入名称为Order-1Order-2的流,其中1和3是您的聚合根ID。然后,$ce-Order流将包含该类型的所有聚合的所有事件。

查看standard projections documentation

通常,这正是创建读取方投影的方法 - 通过在类别流上创建追赶订阅并相应地更新读取模型。

要运行投影,您需要使用--run-projections=all –-start-standard-projections=true才能看到它正常工作。