用户登录

如果应用明确的要求去做一些事情,可以把这些事情定义成一个命令,每个命令都有一个对应的处理器,在这个处理器里可以去做需要做的事情。

定义命令

下面我们可以去定义一个命令还有一个对应的处理器,需要创建用户的时候可以执行这个命令。在 user 里面,新建一个文件,放在 commands 目录的下面,文件的名字是 create-user.command.ts

命令可以是一个普通的类,在这个文件里 export 一个 class,名字叫 CreateUserCommand ,在这个类里面添加一个构造方法,方法里面添加一个参数属性,public readonly ,参数的名字叫 user,值的类型暂时设置成 any。

处理器

命令需要一个对应的处理器,执行命令的时候需要做的事情可以放在命令的处理器里面。在 commands 下面,再新建一个文件,名字是 create-user.command.handler.ts 。

命令的处理器也是一个类,先 export 一个定义的 class,类的名字可以叫 CreateUserCommandHandler 。 让这个类 implements 一个接口,接口的名字是 ICommandHandler,类型应该是这个命令处理器处理的命令,这里就是 CreateUserCommand 。

这个 ICommandHandler 来自之前安装的 @nestjs/cqrs 这个包。 在文件顶部,从 @nestjs/cqrs 这个包里面,导入 ICommandHandler。

实施了这个接口的类需要在这个类里面添加一个 execute 方法,把它标记成一个 async 方法。 名字是 execute,这个方法接收一个 command 参数,它的类型在这里应该是 CreateUserCommand。

在这个 execute 方法里,你可以决定怎么样处理 CreateUserCommand 命令,比如可以把用户数据存储在数据库。这里我们先简单的在控制台上输出这个 command 。 最后再让这个方法 return 这个 command 里的 user 属性的值。

错误

想让这个类可以处理指定的命令,需要在这个类的上面,用一个 @CommandHandler 装饰器,然后把这个处理器要处理的命令交给这个装饰器。不过暂时我们先不用这个装饰器,看看一会儿执行命令的时候会发生什么。

Provider

命令处理器是 Provider,所以要在模块里配置一下,打开 UserModule 模块。在模块里添加一个 providers,里面列出 CreateUserCommandHandler 这个命令处理器。

Commands:定义命令与命令处理器《 企业应用架构:事件驱动 》

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点