我正在写一个网络服务。
通常输入将是XML文档和输出XML或JSON。
应用程序使用具有不同层的MVC模式
我的理解是,应该在Controller层上尽快完成基本验证(即:针对XSD的XML)。
之后,我仍然需要执行额外的验证,其中一些验证是基本的,例如
据我所知,在将XML解组为Java对象时,应该进行这样的基本验证。这也会发生在控制器层中(尽管验证本身将由解组XML的Java对象完成)
最后,我面对更多“复杂”验证示例
这种“复杂”的值似乎是javax.validation.Validator接口的完美候选者。并且感觉它们应该在Controller层中完成。
问题是
答案 0 :(得分:5)
这种做法是否正确?我还应该在其他层验证一些东西吗?
是的,部分。验证输入数据的正确性如日期格式,长度等似乎是正确的。不需要将它们推送到内层。他们需要提前验证。
根据业务规则可能会有一些验证,需要在服务层完成,例如用户/电子邮件在向系统添加用户时已经注册,这将在服务层完成。
我是否在控制器中添加了太多逻辑?我是否应该将某些验证移到业务逻辑所在的服务层?
从我的角度来看,它不被视为逻辑。将数据验证到控制器不同于向其添加业务逻辑。您没有改变/处理数据,而是检查数据的正确性。
如上所述,需要在服务层中实现遵循业务规则的一些验证。
修改:您已添加了网络服务代码,想象您正在调用网络服务&然后在服务器端,它知道数据格式不正确。如果之前已经过验证,它可能已经保存了往返,服务器时间,网络资源等。