3

假设我有一个班级,Address它是两个班级的孩子。在 的情况下,企业只真正关心需要的地址的城市字段(联系人更多的是关于人的姓名和电话以及他们的位置 - 城市)。而对于可能从我们这里收到纸质邮件的人,我们需要完整的地址信息,因此Line1CityState/ProvinceCountryPostalCode/Zip都是必需的。ContactVendorContactVendor

我的想法是创建一个在CityContactAddress字段上使用的子类,然后创建一个用. @NotBlankVendorAddress@NotBlank

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

编辑:更多细节

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;

}

Address然后,只能@NotBlankCity上使用,因为并非所有使用 Address 都需要其他字段。

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

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

4

2 回答 2

2

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

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

于 2013-06-07T14:51:14.297 回答
0

如果其他人发现这一点,我想提供我自己的答案。我最终发现并且它适用于我的情况是,验证组确实是您解决此问题的方式。

这是一篇很棒的博客文章http://www.jroller.com/eallupu/entry/jsr_303_beans_validation_using

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

于 2013-07-12T16:40:50.513 回答