2010-10-01 84 views
5

我得到CQRS的一般概念,但是當涉及到超越示例代碼和幻燈片套件以處理現實世界問題時,我有幾個問題。CQRS中的驗證和錯誤修復

  1. 驗證

    當你需要做的是包括從數據庫檢查值的命令的驗證,你會怎麼做? 註冊服務,我必須輸入一個唯一的電子郵件地址。我聽到的一個說法是,用戶不太可能輸入重複的電子郵件地址,所以在處理命令時給他們發送一封說「抱歉」的電子郵件,或者建議他們重置密碼。這個過程因此避免了爲了驗證而具有讀取模型。但是,你如何處理命令處理程序中的重複案例?你怎麼知道它是重複的?檢查一個readmodel?你可能首先使用它來獲得更好的可用性。

  2. 功能更改/修正錯誤

    ,當你需要的方式來改變一個命令的作品,或者修正錯誤,會發生什麼?在僅追加哲學中,我如何處理所有舊命令和命令處理程序?我不能將它們重命名爲_legacy並隱藏它們,否則我的事件反序列化將不起作用。有什麼優雅的解決方案來解決這個問題?

感謝

回答

4
  1. http://codebetter.com/blogs/gregyoung/archive/2010/08/12/eventual-consistency-and-set-validation.aspx和CQRS郵寄對這個題目的各種討論列表。
  2. 在cqrs郵件列表中也會討論事件版本控制(與事件版本控制不同,不需要命令版本控制)。重播事件以獲取聚合的當前狀態,而不是命令。這樣你的功能就可以發展。沒有辦法改變過去,但有辦法改變現在/未來。在奇怪的情況下,您必須以不同的方式開始跟蹤狀態,請提供明確的命令。對於事件的新屬性,只需爲新數據庫列提供默認值即可。如果這些新值基於已經存在的狀態,則建模一個明確的命令以預先計算它們。優點是可以異步執行此操作,而數據庫升級也會強制您更改代碼。如何在cqrs郵件列表上更好地提問。 一個警告!不要太過輕視事件採購。你可以只用CQRS。 CQRS大部分時間都會執行,我發現人們切換到CQRS + ES。

因此請進入groups.google.com/group/dddcqrs並獲取幫助。另一個有用的資源是cqrsinfo.com