在MVC层或业务引擎中,验证应在哪里



Spring中编码的Web应用程序后端对执行密集计算的"业务引擎"进行远程过程。

这些密集的计算具有高错误率主要是因为从后端到引擎的不良请求和/或DB中的数据不足。

因此,有必要提供可以将错误代码转换为用户消息以帮助识别问题的错误代码。

     ----------         -----------          ----------
    |          |       |           |        |          |
    |   USER   | ----> |  BACKEND  | -RPC-> |  ENGINE  |
    |          |       |           |        |          |
     ----------         -----------          ----------
                             |                    |
                             |                    |
                           -----                -----
                   Config |     |     Business |     |
                   DB     |     |     DB       |     |
                           -----                -----

我认为,验证应发生在打电话给引擎之前,以便快速失败并避免等待发送后将不可避免地失败的响应,取决于负载,处理并返回后端。

问题:验证是否应在:a)后端或b)业务引擎?

奖励问题:如果答案是b),则业务引擎是否返回错误代码并让后端处理转换,或者也实现了消息的i18n?

其他信息:

  • 验证逻辑不是秘密的,在后端和业务引擎中都是众所周知的。
  • 通过RPC调用引擎时使用的配置数据由后端拥有和存储(发动机除请求以外没有访问)。
  • i18n需要错误。

欢迎/反对任何方法的意见和/或替代方案。谢谢。

验证是否应在:a)后端或b)业务引擎中发生?

是。

在多个位置进行验证。验证客户端以获取快速反馈。验证控制器中的安全性,在存储库中验证数据完整性。您知道JSR验证组,对吗?

业务引擎是否应该返回错误代码并让后端处理转换,或者也实现了消息的I18N?

坚持使用JSR验证启动。这个很不错。当存在验证错误时,它会引发异常。将错误消息保留在属性文件中。

我看到的方式,我不希望我的引擎对不良请求进行计算。我没有看到任何价值。因此,您的验证应始终在您的后端上执行,然后仅将过滤的请求发送到引擎。您还必须完善您的Web应用程序,以便还应减少从UI中获得的不良请求数量。因此,在UI控制器本身中设置尽可能多的逻辑,以使您的请求以更好的方式过滤。

最新更新