我试图避免在我的验证上加倍,并想知道MVC数据注释验证是否可以被称为“服务器端验证”。
我已经阅读了几篇帖子,说我应该在业务层再次验证,但我宁愿避免加倍同样的验证。
我是否应该一起忽略数据注释并让我的业务层执行所有服务器端验证,然后我可以在UI上传递它?
答案 0 :(得分:1)
客户端验证无法信任 - 这意味着javascript。你的MVC代码很好(如果验证在C#中,它肯定是服务器端的),你的验证结果可以信任。您是否还希望在业务层中执行验证取决于您。
答案 1 :(得分:1)
我想说这取决于你所说的“业务层”。如果它是在同一进程中运行的逻辑上分离的代码,那么我想你可以信任在表示层中完成的验证(只要它是服务器端验证)。
但是,如果业务层可能在某种服务后面抽象,或者出于任何原因作为单独的进程运行或在单独的服务器上运行,那么我会通过将表示层视为客户端来巩固这种分离。在业务层重新验证。 (这个想法是这种分离通常是在多个客户端的意图(可能由多个开发人员编写)共享该业务层时完成的。因此,您希望像对待任何客户端 - 服务器访问一样对待它们。)
基本上,只要单个“应用程序”接收输入,就可以验证它。如果它来自最终用户的浏览器,请验证它。 (客户端验证不是真正的“验证”,而是一个很好的功能,可以使UI更好,减轻服务器资源的压力。)如果它来自另一个内部应用程序,请验证它。
如果您打算稍后将这些层拆分为多个内部服务,那么您现在可以继续进行验证,只是为了获得良好的衡量标准,假设它不代表重大的性能损失。也就是说,如果将层处理为完全分离更为舒适,并尽可能保持严格的关注点分离。通常,对象应该在内部验证自己。因此,如果您要在代码中采用高度面向对象的方法,那么您将需要保持这种方法。