0

わかった。ここで少し混乱します...

というクラスがあるとしましょうUser

   class User {
     // all variables
     // all getters and setters
   }

ここで、JSR 303 検証を使用して、変数として 、 などをここに配置@NotNull@Rangeます。

これを Form / Command オブジェクトとして使用します。つまり、フォームが送信されると、値が検証され、BindingResultエラーが発生します。

  1. これは、Hibernate の Entity Object のように使用する必要がありますか? (そうであれば、検証アノテーションの上に、、、などの@Entity他の Hibernate アノテーションを追加する必要があります)@Id@Column
  2. データベースからデータをロードすると、これらの検証も開始されますか? (はいの場合、データが既に存在し、検証を確認しない場合はどうなりますか?)
  3. たとえば、データベースに国が存在するかどうか、別のテーブルに xyz 値が存在するかなど、ビジネス検証は通常どこに記述しますか?

ここでも疑問が生じます: - ユーザー フォームは、ユーザー クラスに存在するすべてのフィールドを持っていない可能性があります - データベース テーブル ユーザーは、ユーザー クラスよりも多くのフィールドまたは少ないフィールドを持っている可能性があります - フォームには、別のオブジェクトからのフィールドもある可能性があります。注文。

これらをどのように処理しますか?

心を包み込もうとしている

4

2 に答える 2

1
  1. いいえ、エンティティ オブジェクトと値オブジェクトを混在させるべきではありません。Entity オブジェクトは DB マッピング用で、Value オブジェクトはプレゼンテーション層で使用されます。
  2. アノテーションが付けられたオブジェクトを検証するには、を使用する必要がありますValidator(一般的にはDataBinder. Spring 検証で使用されます) 。
  3. DB の制約ですか、それともバックエンドの検証ですか?

最後の質問ですが、これが、プレゼンテーション レイヤーと永続レイヤーに 2 つの異なるオブジェクトを使用する理由の 1 つです。このようにして、値オブジェクトは、ユーザー (フォーム) によって表示または入力されたものと一致させることができます。

于 2013-02-06T21:12:28.187 に答える