对“同一”类进行多次验证的策略

时间:2013-06-07 14:46:17

标签: java validation

假设我有一个班级Address,它是ContactVendor班级的孩子。在Contact的情况下,企业只关心地址的 City 字段(联系人更多关于此人的姓名和电话及其位置 - 城市)。然而,对于可能从我们这里收到纸质邮件的Vendor,我们需要完整的地址信息,因此 Line1 City 州/省< / em>,国家 PostalCode / Zip 都是必需的。

我的想法是在 City 字段上创建一个使用ContactAddress的{​​{1}},然后使用{{1来创建用@NotBlank装饰更多字段的子类VendorAddress }}。

我不确定这是最好的方法(它使我的域对象和Hibernate映射变得复杂)。有没有人有正确的模式提示?

编辑:进一步的细节

@NotBlank

public class Contact { private Address address; } public class Vendor { private Address address; } public class Address { private String line1; @NotBlank private String city; private String state; private String country; private String postalCode; } 然后, City 上只能有Address,因为并非所有地址的使用都需要其他字段。

我还应该说,我想在JSF中使用这些类(除了在我的服务层中手动调用它之外,它还可以执行“免费验证”)。这是一个“传统的”JSF / Spring / Hibernate应用程序。

也许我想使用http://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html_single/#chapter-groups?不确定这与JSF的“免费”验证如何相互作用

2 个答案:

答案 0 :(得分:2)

在我看来,您应该将持有数据的关注与验证数据分开 - 因为后者是特定于上下文的。您可能希望将一些“核心”验证放入Address,但随后将其他验证器分成ContactAddressValidatorVendorAddressValidator类(可能实现某种Validator<T>接口)。

这与您以不同方式对相同类型进行排序的方法相同,为同一Comparator<T>多次实施T,但在不同的类中。

答案 1 :(得分:0)

如果其他人发现这一点,我想提供我自己的答案。我最终想到的,并且它适用于我的情况,确实,验证组就是你如何做到的。

这是一篇优秀的博文http://www.jroller.com/eyallupu/entry/jsr_303_beans_validation_using

至于它如何与JSF的验证交互,有一个f:validateBean标记,可以让你控制它。