我在公告板上搜索了一下,有一些与我要问的问题相关的线程,但其他问题并不完全像我的情况。
我想实现一个服务(ejb)和不同的客户端(rest api, webservice, jsf managed beans和其他一些客户端)将使用这个服务。我的问题是:在这种情况下,应该在哪里进行数据验证?
在我的业务控制(ejb)中这样做似乎是合理的,-因为我不想为每个客户端实现一种验证器类型-但我没有看到人们这样做…
最诚挚的问候,奥利弗
一般的建议是:每个向外部公开功能的组件都应该验证它接收到的输入。它不应该期望在所有情况下都能收到有效的输入。此外,正如您所说,它将验证保存在一个地方。
另一方面,当双方都在您的控制下决定在客户端进行早期验证并记录预期/所需的有效输入数据时,这可能是一个合理的决定。在设计关系数据库结构时也会遇到类似的问题——可以使用各种约束来确保输入数据的有效性,或者可以检查在数据库中存储数据的组件的有效性。而且,不要忘记,无论何时在较深的层进行验证,当验证失败时,所有较高层都必须处理异常或错误消息。
关于您的具体问题,来自不同客户端的相同服务的使用建议在服务内进行验证。