我正在努力解决这种问题的最佳方法。
我正在导入包含一堆用户的文件,所以我创建了一个名为
ImportUsersCommandHandler
,我的命令是ImportUsersCommand
,其中以List<User>
作为参数之一。
在处理程序中,对于我需要导入的每个用户,我必须确保UserType
是有效的,这才是造成混乱的地方。我需要针对数据库进行查询,以获取列出所有可能的用户类型,并且比我要导入的每个用户都要验证导入中的user type id
是否与数据库中的用户匹配。
我有3个选择。
GetUserTypesQuery
,并获取其余信息,然后将其作为列表传递给ImportUsersCommand并在命令处理程序中进行验证GetUserTypesQuery
而不传递它(命令调用另一个查询)GetUsersTypeQuery
,仅在命令中执行查询结果(仍然是查询,但不涉及查询/处理程序)我觉得所有这些都是肮脏的解决方案,而不是应用CQRS的正确方法。
答案 0 :(得分:0)
我同意选项1听起来最好,但可能建议添加 pre 处理程序以验证您的输入?
因此 ImportUsersCommandHandler 负责处理您的数据(仅此一项),并添加一个在验证之前运行的处理程序(在您的示例中,检查用户类型和其他内容)并从中退出不及格。因此,它查询数据库,检查用户类型并在失败时执行所需的任何操作。否则,它只会传递给您的 business 处理程序(ImportUsersCommandHandler)。
我已经习惯在NET Core中使用Mediatr,并且这种模式很好用(这就是我们的工作方式),所以很抱歉,如果这不适合您的环境/设置!