2013-01-31 46 views
7

我試圖圍繞整個CQRS/ES的想法,並考慮編寫一個概念證明和如何在我們當前的應用程序中實現它的技術規範。CQRS/ES:批量操作/進口

有問題的操作(就如何將它們映射到CQRS/ES而言)是通過文件導入批量更新複雜的文章數據 - 數據文件中的單行擴展到文章組,文章,標題,單元和物業,將買方分類鏈接到供應商分類以及導出部分或整個分類的文件的批量加載。

我讀過某處(可能是DDDCQRS Google Group)建模文章導入BC(讀取Excel文件或其他網格文件)的最佳方法是將一行導入的數據作爲聚合和整個導入爲聚合根。這樣,解析文件後,我只需要創建一個導入聚合,併爲每一行添加該行到導入。這會將事件存儲在BC的事件存儲中,併發布BC文章管理者將要訂閱的事件。這有意義嗎?

在當前系統中,導入是在單個長時間運行的事務中運行的。根據導入的數據量和給定用戶已存在的數據量(因爲數據與以前導入的文件和當前數據進行比較),應將長時間運行讀取爲5到40分鐘。當操作中途失敗時,目前整個操作被回滾。這在CQRS/ES中如何工作?

回答

2

與CQRS/ES的小問題。一個非常幼稚的做法如下:

  • 找到你的工作單位,
  • 制定這些單位遞增標識方案,
  • 改造原有的投入工作,這些單位(不太可能失敗&快)並沿途分配身份,
  • 現在將每個工作單元作爲交易進行處理,將每個交易的最後處理單位的工作身份更新爲一部分(或多個如果您打算並行處理)
  • 失敗從最後一名職業球員恢復自動化的或者在操作員給予了綠燈之後,自己的工作單元就開始了。

是否有一個事件源或基於狀態的模型落後於所有劣等國際海事組織。

+1

我同意這個問題。無論您如何設計模型,執行導入的方式都是要弄清楚您的命令是什麼,爲導入文件中的數據創建它們,然後通過它們的處理程序運行它們。無論是每行一條命令還是多條命令,都取決於您的模型和事務性命令,而不是相反。不要爲導入編寫模型,請在模型中編寫導入。 – Dan