2017-01-03 58 views
0

我一直在尋找Event Store一段時間,現在有一件事讓我難過,那就是應該在什麼時候寫一個投影?創建扁平投影是否很常見?EventStore預測何時使用它們

的設置在這裏的每一聚集

使用流例如,可以說我有看起來像這樣的兩個事件:

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); 
    }) 

上面沒有做很多事情,只彙集了所有的流int一個單數。是否有可能將更扁平的視圖投射到例如這樣的東西中?也許我得到了我的電線,但顯然使用emit可以實現這一目標?

{ 
    string Reference; 
    string CurrencyCode; 
    decimal PayingAmount; 
} 

我的想法是,一旦我已經寫入流中我可以保證總處於有效狀態,因此對於任何有關各方,我應該只公開這些流程需要的字段。正在預測一個簡單的模型(一個非正式的視圖)是正確的事情..

上面是一個簡單的例子,但你可以想象一個聚合會有點複雜。

如果我錯過了任何東西或需要進一步澄清,請評論,我可以添加。

+0

聽起來很好。我認爲Projections目前仍處於測試階段 - 應該是4.0.0版本。您是否閱讀過現有的預測文檔? http://docs.geteventstore.com。在我研究的一個項目中,我們使用了內置的投影,當我們想要查詢一些簡單的狀態時(用戶名必須是唯一的,所以我們維護了用戶聚合/流中的用戶名投影)。 – tomliversidge

+0

我已閱讀文檔,至少缺少一些細節。是否有可能在查詢中加載一個流,以便您可以拉動整個聚合?這樣如果我得到事件2,加載整個聚合,從事件1和事件2中獲取信息並創建展平視圖。這可能嗎? –

+0

您可以訂閱表示您的聚合的類別(在我的示例中爲「用戶」),然後使用簡單的JavaScript語句確定如何處理每個事件類型......即,如果事件類型= eventtype1 {}等 – tomliversidge

回答

0

您正在尋找一個標準事件類別投影。

它將相關事件發送到名爲'$ ce-'的蒸汽。該類別是您的對象類型。

例如,您的聚合類型爲Order,和你寫事件OrderCreatedOrderLineAdded等與名Order-1Order-2,其中1和3是你的總根IDS流。然後,$ce-Order流將包含該類型所有聚合的所有事件。

看看standard projections documentation

通常這就是創建讀取側預測的方式 - 通過在類別流上創建追趕訂閱並相應地更新讀取模型。

爲了運行預測,您需要使用--run-projections=all –-start-standard-projections=true來查看它的工作情況。

相關問題