login/register 是 CQRS 中的命令或查询

Are login/register commands or queries in CQRS

所以对于登录,因为它并没有真正在数据库中创建任何新内容,而只是 returns 如果我们已经登录,可能还有一些用户数据,它应该是命令还是查询?

而注册呢,既然创建了一个新用户,那应该是命令吧?如果我想 return 用户数据或 jwt 怎么办?

我是否应该 运行 我的命令,一旦客户端收到响应 运行 在它们之后立即进行查询?

对于大多数与设计相关的问题,我会用“视情况而定”来回答这个问题。我已经看到两种解决方案在不同情况下实施。

您需要问的主要问题是,您是否将用户登录视为系统状态更改。请注意,它是否更改数据库中的状态无关紧要。系统大于数据库

作为命令登录

对于某些系统,了解哪些用户已登录以及何时、从何处登录等很重要。我见过的一个例子是一个医疗系统,它需要记录哪个医生何时何地登录,以及哪个医疗记录已被访问。此外,在一台机器上登录会停止另一台机器上的会话。这些操作的可靠跟踪对于应用程序至关重要。因此,登录被实现为生成存储在事件存储中的事件的命令。投影为每个用户保留当前登录状态。

作为查询登录

然而,我见过的大多数系统都需要简单地了解是否可以将任何给定凭据映射到用户帐户。如果是这种情况,将生成一个包含身份验证“证明”的令牌。系统本身并不真正关心谁登录了。只是每个请求都需要通过检查“证明”来验证。在这种情况下,登录是一个查询。