假设您有一个数据库实体类MyClass的实例。 您在此实体中有3个字段,这些字段都标记为“不能为空” 如果您创建此类的对象并将其传递给持久化,那么当DB层尝试持久化该对象时,如果它没有填充3个字段,则会抛出异常。 在这种情况下,最佳做法是什么。 应该是MyClass中的构造函数,setter方法验证所有字段是否正确,如果没有抱怨。 或者您是否允许创建无效对象并让DB层执行抱怨?
答案 0 :(得分:4)
1)您应该阻止客户提交无效数据
2)即使你做了1,你仍然需要在服务器上进行验证 - 人们会尝试使用curl和wget进行古怪的事情......
3)我会在服务层检查传入数据是否有效。如果不是,我会向客户端返回某种错误代码,甚至不进行保存。对于简单的情况,我的域类上会有validate
方法。对于复杂的情况,我会创建一个服务方法来进行验证,例如,在需要根据数据库中的数据检查提交的数据的情况下。没有一种正确的方法可以进行涵盖所有情况的验证。
执行保存和捕获异常的问题是很难将此错误与可能发生的其他错误区分开来。此外,测试验证代码很容易,并且服务在验证失败时做了正确的事情。此外,验证逻辑是业务规则,能够轻松测试业务规则总是好的。