如何在应用CQRS时获取ID?

Tom*_*son 45 language-agnostic cqrs

我对CQRS的看法是严格遵循你的命令不返回任何东西(返回类型为void),所以我的例子非常简单:如何在创建时检索ID?

例如,在创建信用卡交易时,返回交易ID似乎非常重要,或者在创建客户时,如果您获得了您创建的客户或客户ID,那么浏览器可以自动导航到该客户页面会更容易例如.

一种解决方案可能是首先要求提供ID,然后使用该ID创建客户或交易,但这看起来很奇怪.

有没有人有这方面的经验,或者现在应该如何以最有效的方式完成?也许我误会了什么?

Rob*_*den 26

CQRS完全是"即发即忘",由于GUID非常可靠(碰撞风险低),因此在GUID中发送您自己的信息是没有问题的.

步骤基本上是:

  1. 创建你的命令
  2. 生成并为其分配您的身份(GUID)
  3. 解雇命令
  4. 返回先前生成的标识

阅读有关维基百科上的GUID的更多信息

  • 人们认为GUID生成在"客户端"是"危险的"或"怪异的"有更大的问题,没有做任何现实世界的CQRS实施,并且正在关注甚至不存在的问题. (9认同)
  • 当然,生成GUID本身就违反了CQRS. (3认同)
  • @RBarryY - 我认为你正在将建筑CQRS模式与CQS混合在一起.无论如何,将GUID用于此类事情是完全正常的.如果您需要一个"友好"的整数ID,那么只需生成它并将其视为您实体的属性,并在URL中使用它,而不是应用程序在内部使用的"实际"GUID ID. (3认同)
  • 不明白为什么会这样. (2认同)
  • 系统GUID生成器没有状态.创建GUID是一种直接的只读计算.但我可能错了?很高兴看到你在我旁边的入口. (2认同)
  • 我想说“好看的网址”是我很长一段时间以来听到的最糟糕的论点。有一种数据库模式(不记得它的名字),但它是一种在 GUID(或某种身份)和整数主键之间创建映射的模式。这种模式大概适合那种情况。 (2认同)