Java 验证参数包装器中的参数 class

Java validating parameters in a parameter wrapper class

我有一个 class ,它的构造函数接受一个对象,其中包含 class 的参数(我确定它有一个漂亮的名字,但我不知道),并且我正在考虑处理参数验证的选项。

我是否应该在主 class 构造函数中进行验证,并让参数包装器 class 成为一个无法质疑任何给定值的愚蠢容器?如果是这样,抛出 IllegalArgumentExceptions 是否是一种好习惯,即使它是包装器 class 的成员,即 "illegal",而不是对象本身?虽然我猜一个带有 "illegal" 参数的对象本身可以被视为一个 "illegal object"。

另一个选项似乎是在参数包装器中进行一些验证 class。

我不知道,对我来说这听起来 "cleaner" 让主要 class 跟踪它接受的值,这听起来不像是包装器的责任 class?话又说回来,我可以写一个新的验证 class,但这听起来……没必要?如果你愿意,那就太过分了。

这个问题的答案是,这完全取决于您,完全取决于您的上下文、谁使用哪个对象等。但是您所说的 "parameter object" 称为 bean,你问的是 bean 验证,这可能值得 google 搜索。

如果其他人(other 类)将使用您的 "parameter object",那么将验证放在对象本身内可能是有意义的。但话又说回来,它还取决于该对象的来源——它是否来自属性文件?从图形用户界面?可能两者之一?那么在对象外部进行验证可能更有意义,以便可以以某种合理的方式通知用户。

没有一个正确答案。

如果您决定在对象内部进行验证,bean 验证允许您使用注释来强制每个变量的有效性。更多信息 here.

编辑:您还可以考虑以下情况:两个不同的对象可能使用相同的 "parameter object" 但对于什么是有效参数对象有完全不同的想法。在这种情况下,在对象外部进行验证会更有意义。就像我说的,这完全取决于您的上下文。

虽然它更主观,​​但我认为最好在包装器中进行验证 class。 无论是包装器还是 main/actual,一个对象就是一个对象,它的完整性应该随着创建而保持。因此,在将包装器对象传递给 main class.

之前保持包装器对象的完整性是一个好习惯。

参数包装器对象是否知道它是无效的?其中包含的数据的有效性由使用它的上下文提供。

可以执行简单的验证,例如在包装器对象中不允许 nulls,但通过接受 class 来完成参数的验证似乎是合适的。 更复杂的验证也是一种选择,但可能会限制您在其他用例中重复使用该对象的能力。

考虑可能有多个 class 接受这些参数对象的情况,其中一个接受 null 某些值,而另一个不接受。如果您在包装器中明确禁止 null,那么您已经在允许或允许它的 class 中消除了该用例。

同样,这完全取决于您以及您打算如何使用这些对象。验证必须在某个地方完成,问题是,您希望谁负责它以及您希望它的可维护性如何?