Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在将对象传递给ORM帮助器类以持久化对象之前,验证对象的最佳实践是什么_Java_Orm - Fatal编程技术网

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

Java 在将对象传递给ORM帮助器类以持久化对象之前,验证对象的最佳实践是什么,java,orm,Java,Orm,假设您有一个DB实体类MyClass的实例。 此实体中有3个字段都标记为“不能为空” 如果创建此类的对象并将其传递给持久化对象,则如果DB层没有填充3个字段,则在尝试持久化该对象时将引发异常。 在这种情况下,最佳做法是什么。 如果MyClass中的构造函数、setter方法验证所有字段是否正确,如果没有,则进行投诉。 或者您是否允许创建无效对象并让DB层进行投诉?1)您应该防止客户端提交无效数据 2) 即使你做了1,你仍然需要在服务器上验证——人们会用curl和wget尝试一些古怪的事情 3)

假设您有一个DB实体类MyClass的实例。 此实体中有3个字段都标记为“不能为空” 如果创建此类的对象并将其传递给持久化对象,则如果DB层没有填充3个字段,则在尝试持久化该对象时将引发异常。 在这种情况下,最佳做法是什么。 如果MyClass中的构造函数、setter方法验证所有字段是否正确,如果没有,则进行投诉。 或者您是否允许创建无效对象并让DB层进行投诉?

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

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

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

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

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

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

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


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

检查是的,您应该在持久性层之前就知道它很好。服务需要自我保护;它不应该信任客户机。验证应该在表示层进行(或者至少在表示层进行所有可能的验证)。这是成本更低的地方,并且可以生成和显示适当的错误消息。如果表示层不完全在您的控制之下,或者如果您需要额外的检查,则还需要在服务层中进行验证。JB yes这是我的#1。就我个人而言,我也会一直在服务器上进行验证,即使有一个客户机并且我控制它。我同意hvgotcodes,因为服务层不应该相信客户机已经完成了验证。即使有,也有不同级别的验证。客户机可以检查所需的元素和格式,但不知道业务规则。这最好留给服务层。我的观点是,在web应用程序中,JavaScript验证是一个额外的好处,但很难实现,也很容易规避。应该在服务器代码的表示层中进行验证。如果有些客户机不在您的控制之下,或者您需要皮带和吊带,那么服务层也应该进行验证。不过,我不喜欢将验证方法放入域对象中,因为IMHO,验证取决于用例,而不是对象。如果您有一个多步骤向导,或者如果您可以创建和修改同一个对象,那么相同的规则就不适用了。是的,您应该知道,在持久性层之前,它是很好的。服务需要自我保护;它不应该信任客户机。验证应该在表示层进行(或者至少在表示层进行所有可能的验证)。这是成本更低的地方,并且可以生成和显示适当的错误消息。如果表示层不完全在您的控制之下,或者如果您需要额外的检查,则还需要在服务层中进行验证。JB yes这是我的#1。就我个人而言,我也会一直在服务器上进行验证,即使有一个客户机并且我控制它。我同意hvgotcodes,因为服务层不应该相信客户机已经完成了验证。即使有,也有不同级别的验证。客户机可以检查所需的元素和格式,但不知道业务规则。这最好留给服务层。我的观点是,在web应用程序中,JavaScript验证是一个额外的好处,但很难实现,也很容易规避。应该在服务器代码的表示层中进行验证。如果有些客户机不在您的控制之下,或者您需要皮带和吊带,那么服务层也应该进行验证。不过,我不喜欢将验证方法放入域对象中,因为IMHO,验证取决于用例,而不是对象。如果您有一个多步骤向导,或者如果您可以创建和修改相同的对象,则不适用相同的规则。