3

クラスがあり、それがとクラスAddressの両方の子であるとしましょう。の場合、ビジネスは Address のCityフィールドが必須であることのみを気にします (連絡先は、人の名前と電話番号、およびその場所 (City) に関するものです)。一方、私たちから紙のメールを受け取る可能性のある の場合は、完全な住所情報が必要なので、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次に、すべての Address の使用で他のフィールドが必要になるわけではないため、@NotBlankon Cityのみを持つことができます。

また、これらのクラスを 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に分離します (おそらくある種のインターフェースを実装します)。ContactAddressValidatorVendorAddressValidatorValidator<T>

これは、同じタイプを異なる方法でソートするのと同じアプローチであり、同じを異なるクラスでComparator<T>複数回実装します。T

于 2013-06-07T14:51:14.297 に答える
0

他の誰かがこれを見つけた場合に備えて、私は自分の答えを提供したいと思います。私が最終的に理解したのは、私の場合はうまくいくということですが、実際、検証グループはこれを行う方法です。

これは優れたブログ投稿http://www.jroller.com/eyallupu/entry/jsr_303_beans_validation_usingです

また、JSF の検証とどのように対話するかについては、それを制御できる af:validateBean タグがあります。

于 2013-07-12T16:40:50.513 に答える