客户端服务器数据交换持久性-气味

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

假设我有一个客户端,它向服务器发送一些带有输入的RunLogicCommand。服务器以一些输出响应,该输出是供用户验证的报告。此时,服务器尚未保留任何内容。然后,客户端在单独的SaveCommand中发送回整个报告,该命令将保留报告数据。

对我来说,这种交换的某些部分似乎是不必要的。也就是说,一旦用户验证了报告,他们似乎就不必将整个报告发送回服务器进行持久化。也许还有一些敏感数据也可能在这里公开?

在这种情况下,典型的方法是什么?

我可以看到两个选项:

  1. 用户只发送带有输入AGAIN的RunLogicCommand并带有一些标志,表明应保留该标志。我不太喜欢这个选项,因为逻辑可能很复杂并且需要一些时间来计算。
  2. 将报告缓存在服务器(或其他服务,甚至是db)上,然后让客户端将报告ID发送给SaveCommand进行保存。

这些方法中的任何一个是否有问题? 是否有更好,更典型的方法?

谢谢!

web caching architecture client-server cqrs
1个回答
1
投票

这里没有最佳解决方案:

您首先提到的方法的缺点是:

  • 网络流量增加,可能增加成本并缩短响应时间
  • 您可以确定发送的文档与收到的文档相同。您可以,但是这需要额外的工作。
  • 正如您提到的,暴露敏感数据的风险增加。但是,您正在将其发送给客户端。

两个选项中第一个的缺点是:

  • 两次运行报告会增加服务器的负载,由于需要更多处理能力,因此产生了额外的成本。
  • 如果基础数据在两个请求之间已更改。然后,由用户验证的报告和存储在数据库中的报告可能会不同。

我将使用您的第二个选项的变体:

  • 生成报告后立即将其存储在数据库中,状态为“等待用户验证”
  • 当用户验证报告时,将状态更新为已验证。
  • 为了避免在数据库中包含许多未验证的报告,您可以使用批处理作业来检查并删除所有早于x天的未验证报告。
© www.soinside.com 2019 - 2024. All rights reserved.