如何使用 CQRS 处理 MixedQuery?
How to handle MixedQuery with CQRS?
在正确设计的应用程序中,您可能可以将所有对命令的请求(仅更新聚合和 return 无效)和查询(从特定读取优化模型中提取数据)分开。
但是如果您已经有一个繁重的应用程序并且想慢慢地将它移动到 ES + CQRS 路径,您可能会请求修改和更新模型以及 return 所有结果(如果您这样做几乎相同一个命令然后查询但那将是 2 个请求)这就是我所说的混合查询的意思。
我明白这显然是一个理论问题,我这里没有任何代码来证明它,但是
你如何使用 CQRS 处理这样的请求?
您的 "mixed query" 超出了 CQRS 的范围。我的回答是——如果你有这个,你就没有 CQRS。 CQRS 意味着命令和查询是 隔离的,这就是重点。
您不必立即将所有内容都移至新模型,您将拥有两个并行系统并从一个系统逐步移至另一个系统。我强烈不建议将旧东西混合到新模型中。
看来您基本上是在谈论牺牲 Command-Query Separation,这是 CQRS 的先决条件,也是一直以来的良好开发实践。
如果我要转向 CQRS 方法,我会开始 通过符合 CQS(如果有的话),在引入整个CQRS设备。
您不必像大爆炸一样返工,您可以逐个功能切片进行功能切片,确保您有高级自动化测试来保护重构。
在正确设计的应用程序中,您可能可以将所有对命令的请求(仅更新聚合和 return 无效)和查询(从特定读取优化模型中提取数据)分开。
但是如果您已经有一个繁重的应用程序并且想慢慢地将它移动到 ES + CQRS 路径,您可能会请求修改和更新模型以及 return 所有结果(如果您这样做几乎相同一个命令然后查询但那将是 2 个请求)这就是我所说的混合查询的意思。
我明白这显然是一个理论问题,我这里没有任何代码来证明它,但是
你如何使用 CQRS 处理这样的请求?
您的 "mixed query" 超出了 CQRS 的范围。我的回答是——如果你有这个,你就没有 CQRS。 CQRS 意味着命令和查询是 隔离的,这就是重点。
您不必立即将所有内容都移至新模型,您将拥有两个并行系统并从一个系统逐步移至另一个系统。我强烈不建议将旧东西混合到新模型中。
看来您基本上是在谈论牺牲 Command-Query Separation,这是 CQRS 的先决条件,也是一直以来的良好开发实践。
如果我要转向 CQRS 方法,我会开始 通过符合 CQS(如果有的话),在引入整个CQRS设备。
您不必像大爆炸一样返工,您可以逐个功能切片进行功能切片,确保您有高级自动化测试来保护重构。