問題:
Play フレームワークでプログラミングするとき、同じタイプの複数のモデルを作成している過去に何度も同じ問題に遭遇しているように感じます。これは、異なるユース ケースで特定のモデルに関する異なるデータを追加、更新、または使用したいからです。 .
説明しましょう。登録とログインという 2 つの異なるビューがある例を考えてみましょう。
次のユーザーモデルがあります:
/**
* Example User class (simple annotations for demo purposes).
*
*/
@Entity
public class User {
@Id
public Long id;
@Required
public String email;
@Required
public String password;
@Required
public String firstName;
@Required
public String lastName;
}
登録の場合: register.scala.htmlに対応するすべてのフィールドがあります: email、password、firstName、lastName - 登録時にそれらすべてが必要になるからですよね?
しかし、repeatPassword フィールドを使用して、ユーザーがパスワードを正しく入力したことを確認したいので、これを User モデルに追加します。
@Required
@Transient
public String repeatPassword;
わかりました。このモデルを拡張して、フォームが送信されたときに「自動」検証を修正するために、パスワード確認チェックを繰り返すようにします。次のようにします。
public String validate() {
if(!password.equals(repeatPassword)) {
return "Passwords doesn't match.";
}
return null;
}
}
したがって、今でも、データベースには保持されないが登録内で使用される追加の属性 repeatPassword が 1 つあります。
問題 #1:私たちのモデルは少しずつ混乱し始めます。
ログインの場合:サインインしようとしているユーザーなので、同じモデルを使用したいと思いますよね? しかし、すべてのフィールドの代わりに、必要なのは電子メールとパスワードだけです。
問題 #2:私のユーザー モデルは、登録内で使用するために既にカスタマイズされているため、ログインで使用できません。登録内のUserRegistrationモデルと、2つの異なるフォームを同じ登録ビューにレンダリングする=紛らわしい。
問題 #3:ログイン ページで User モデルを使用できません。注釈が配置されているためです。firstName、lastName などの必要なフィールドをすべて追加しないと、エラーが発生します。繰り返しますが、ログインして仕事をしたいという理由だけで、別の UserLogin モデルを作成する必要があります。以下の例:
public class UserLogin {
@Required
public String email;
@Required
public String password;
public String validate() {
if(User.authenticate(email, password) == null) {
return "Invalid user or password";
}
return null;
}
}
非常に高速なので、ユーザーを表すためだけに 3 つの異なるモデルを用意します。そのうちの 1 つはデータベースに永続化され、他の 2 つはテンプレート側でログインおよび登録機能を完了するときにエラーを検証するために使用されます。
だから私の質問は、一体どうやってこの混乱を解決し始めるべきなのか? コードの複雑さは非常に急速に高まっています:)テンプレートモデルが注釈内のモデルのみである別のmodels.templateパッケージとmodels.databaseパッケージを作成する必要があります。エラーがない場合、データベースに情報を保存または更新する前に実際のモデルを埋め始めますか? 皆さんからの回答がどうしても必要です.1つのモデルアプローチを作成できますか? 事前にthnx。