2012-05-02 72 views
0

我試圖在一個寵物項目中應用CQRS:在我的例子中有FoodCourse命令內部的複雜類型

一個課程由許多不同的食物組成。

在我的設計,我有這些命令:

AddFoodToCourseChangeFoodQuantityInCourse等等

如果我創建一個CourseCommandHandler我會得到一個ICourseRepository的依賴,以修改課程,但保留命令簡單,我會具有CourseId和FoodId屬性而不是Food。

在處理程序中,我想只管理Ids並從存儲庫中獲取所有相關數據?

如果我已經明白正確的我的應用程序必須遵循以下流程:

使用ReadModel =>創建一個命令,發送到總線=>CommandHandler消耗命令,以domain object操作和保存的對象與repositories =>Domain objects引發事件併發布到總線=>EventHandler消耗事件和修改ReadModel對象

回答

2

在我想只管理IDS,並得到所有從庫中的相關數據 還是不處理?

正確。命令處理程序是注入處理命令所需的存儲庫和其他依賴關係的地方。如您所述,命令應該使用ID來引用實體,而不是實體本身。這是因爲這些命令旨在被序列化並跨應用程序邊界傳遞。你的工作流程也是正確的。看看here以獲得更深入的治療。

+0

所以你告訴我,我必須注入我需要的每個存儲庫,或者我必須創建一個允許實體加載/保存任何類型的獨特存儲庫? –

+0

存儲庫實現由您決定,但典型的CQRS存儲庫是一個事件存儲區,可以存儲通過guid鍵入的各種類型的事件。 – eulerfx