在将对象传递给ORM助手类以持久化它之前,验证对象的最佳实践是什么



假设您有一个DB实体类MyClass的实例。此实体中有3个字段,它们都标记为"不能为null"如果您创建了一个此类的对象并将其传递给持久化,那么当DB层试图持久化该对象时,如果它没有填充3个字段,则它将抛出异常。在这种情况下最好的做法是什么。如果MyClass中的构造函数、setter方法验证所有字段是否正确,如果没有抱怨。还是允许创建一个无效的对象,并让DB层来抱怨?

1)您应该防止客户端提交无效的数据

2) 即使你做了1,你仍然需要在服务器上验证——人们会尝试curl和wget的古怪东西。。。

3) 我会在服务层中检查传入数据是否有效。如果不是,我会向客户端返回某种错误代码,甚至不进行保存。对于简单的情况,我会在我的域类上有一个validate方法。对于复杂的情况,我会创建一个服务方法来进行验证,例如,在需要根据DB中的数据检查提交的数据的情况下。没有一种正确的方法来进行涵盖所有情况的验证。

保存和捕获异常的问题是,很难将此错误与可能发生的其他错误区分开来。此外,测试验证代码很容易,而且服务在验证失败时会做正确的事情。此外,验证逻辑是业务规则,能够轻松地测试业务规则总是很好的。

最新更新