CQRS-如何处理命令是否需要数据库(查询)中的数据

问题描述 投票:0回答:1

我正在努力解决这个问题的最佳方法。我正在导入包含一堆用户的文件,所以我创建了一个名为ImportUsersCommandHandler,我的命令是ImportUsersCommand,它以List<User>作为参数之一。

[在处理程序中,对于我需要导入的每个用户,我必须确保UserType有效,这是造成混乱的地方。我需要对数据库进行查询,以获取所有列表可能的用户类型,并且比我要导入的每个用户,我要验证导入中的user type id是否与数据库中的一个匹配。

我有3个选项。

  1. 创建查询GetUserTypesQuery,并获取其余信息,然后将其作为列表传递给ImportUsersCommand并在命令处理程序中进行验证
  2. 从命令本身调用GetUserTypesQuery而不传递它(命令调用另一个查询)
  3. 不创建GetUsersTypeQuery,仅在命令内执行查询结果(仍然是查询,但不涉及查询/处理程序)

我觉得所有这些都是肮脏的解决方案,不是应用CQRS的正确方法。

cqrs mediatr
1个回答
0
投票

我同意选项1听起来最好,但可能建议添加pre处理程序以验证您的输入?

所以ImportUsersCommandHandler负责导入数据(仅导入数据),并添加一个在验证之前运行的处理程序(在您的示例中,检查用户类型,也许还检查其他内容),并且保证数据不会通过。因此,它查询数据库,检查用户类型并在失败时执行所需的任何操作。否则,它只会传递给您的business处理程序(ImportUsersCommandHandler)。

我已经习惯在NET Core中使用Mediatr,并且此模式很好用(这是我们的工作,所以很抱歉,如果这不适合您的环境/设置!

© www.soinside.com 2019 - 2024. All rights reserved.