我一直在尋找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;
}
我的想法是,一旦我已經寫入流中我可以保證總處於有效狀態,因此對於任何有關各方,我應該只公開這些流程需要的字段。正在預測一個簡單的模型(一個非正式的視圖)是正確的事情..
上面是一個簡單的例子,但你可以想象一個聚合會有點複雜。
如果我錯過了任何東西或需要進一步澄清,請評論,我可以添加。
聽起來很好。我認爲Projections目前仍處於測試階段 - 應該是4.0.0版本。您是否閱讀過現有的預測文檔? http://docs.geteventstore.com。在我研究的一個項目中,我們使用了內置的投影,當我們想要查詢一些簡單的狀態時(用戶名必須是唯一的,所以我們維護了用戶聚合/流中的用戶名投影)。 – tomliversidge
我已閱讀文檔,至少缺少一些細節。是否有可能在查詢中加載一個流,以便您可以拉動整個聚合?這樣如果我得到事件2,加載整個聚合,從事件1和事件2中獲取信息並創建展平視圖。這可能嗎? –
您可以訂閱表示您的聚合的類別(在我的示例中爲「用戶」),然後使用簡單的JavaScript語句確定如何處理每個事件類型......即,如果事件類型= eventtype1 {}等 – tomliversidge