我正在尝试在宠物项目中应用CQRS:在我的示例中,有Food
和Course
。
课程由许多不同的食物组成。
在我的设计中,我有这些命令:
AddFoodToCourse
ChangeFoodQuantityInCourse
等......
如果我创建一个CourseCommandHandler,我将获得一个ICourseRepository作为依赖,以便修改课程但保持命令简单我将使用CourseId和FoodId属性而不是Food。
在处理程序中,我想只管理ID并从存储库获取所有相关数据?
如果我理解正确,我的应用必须遵循以下工作流程:
使用ReadModel
=>创建一个命令并发送到bus => CommandHandler
使用命令,使用domain object
操作并使用repositories
=>保存对象Domain objects
举起活动并发布到bus => EventHandler
使用事件并修改ReadModel
对象
答案 0 :(得分:2)
在处理程序中,我想只管理ID并获得所有相关信息 来自存储库的数据与否?
正确。命令处理程序是注入处理命令所需的存储库和其他依赖项的地方。如您所述,命令应引用使用ID而非实体本身的实体。这是因为命令要序列化并跨应用程序边界传递。您的工作流程也是正确的。看看here,就这个问题进行更深入的处理。