2015-04-16 20 views
1

我有一個使用CQRS + ES的系統。我需要從電子表格導入彙總數據,並想知道是否有人對最佳方式有任何想法。在CQRS事件源系統中導入電子表格

我最初的想法是通過電子表格創建X數量的「CreateNewAggregateCommand」類型命令。然後,我可以運行這些命令,並且它們的行爲就像用戶使用UI創建了單個命令一樣。這看起來是正確的還是有更好的方法?

如果重要的是如果電子表格中的一行無法導入,那麼整個文件需要被拒絕。在最終一致的系統中,如果導入中的一行失敗,您將如何處理一致性?你會發出某種補償命令嗎?

回答

2

在事件源系統中,導入或批量更新操作通常以特殊命令處理程序的形式實現,並引發特殊事件,如ImportFromSpreadsheet/ImportedFromSpreadsheet。這樣可以更輕鬆地跟蹤行爲,所以您清楚地知道這個特定行是導入的,而不是手動創建的。如果您還在事件存儲中保存命令以進行審計,則可以使用常規事件。

根據行導入失敗,在給定的條件下,我會嚴重地避免導入行並期望在中間的某處發生錯誤。如果您預先驗證完整的電子表格以確保它將導入,那將會容易得多。我知道這可能很難,但是你可以在你的命令中有一個字段,表明你正在進行驗證,所以它不應該引發任何事件,所以你可以保持邏輯相同的驗證和實際導入。

0

我們在這裏需要務實,如果您需要導入數千個條目,您不會一個一個地做。這裏是你應該做的,使用已知的模式Claim Check

將文件推送到您的服務器,將其上傳到FTP位置或類似的東西,然後創建一個簡單的命令來啓動導入過程。使用GUID作爲文件名,並在命令中添加該文件名,然後處理程序應驗證文件是否存在並開始處理該文件。

希望這會有所幫助。