根據CQRS à la Greg Young,事件處理程序(和下游事件denormalizers)對事件發佈者以前發佈的傳入事件做出反應。如何在CQRS系統中引入新事件denormalizer?
現在讓我們假設在運行時我們要添加一個新事件denormalizer:基本上,這很容易,但它需要將其數據轉移到當前狀態。
這樣做的最好方法是什麼?
我是否應該向活動商店發送無序請求並要求提供以前發佈的所有活動?
或者是否有更好的方法來做到這一點?
根據CQRS à la Greg Young,事件處理程序(和下游事件denormalizers)對事件發佈者以前發佈的傳入事件做出反應。如何在CQRS系統中引入新事件denormalizer?
現在讓我們假設在運行時我們要添加一個新事件denormalizer:基本上,這很容易,但它需要將其數據轉移到當前狀態。
這樣做的最好方法是什麼?
我是否應該向活動商店發送無序請求並要求提供以前發佈的所有活動?
或者是否有更好的方法來做到這一點?
您可以針對新處理程序獲取並重放所有(必需)事件。這可以在一個單獨的過程中完成,因爲你基本上想要的是讓持久化視圖模型進入適當的狀態。
查看Rinat Abdullin的Lokad.CQRS示例項目的生產示例。特別是SaaS.Engine.StartupProjectionRebuilder
可能是一個有趣的來源,儘管它相當複雜。
也可以建立投影,以便他們記住他們最後看到的事件。然後,在任何初創公司,他們都會要求參加這個活動,並向前進。重新開始一箇舊的投影並建立一個新的投影然後變成大致相同的東西。
好主意:-)感謝分享! –
如果您擁抱有界的上下文複雜集成,則可能需要刪除整個讀取模型並重建它。
感謝您的回答和鏈接。我認爲把它作爲一個單獨的過程來運行是一個好主意,基本上我也很清楚該怎麼做。唯一的問題是:誰把它踢掉?事件處理程序?管理員「手動」? ...? –
我見過基本上http://stackoverflow.com/questions/2559096/cqrs-how-to-handle-new-report-tables-or-how-to-import-all-history-from-the-e ?rq = 1回答了這個問題。 –