问题:
在使用 play framework 编程时,我觉得我遇到了与过去很多次相同的问题,因为我想在不同的用例中添加、更新或使用关于某个模型的不同数据,所以我创建了多个相同类型的模型.
让我解释一下,让我们考虑一个示例,其中我有 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 中拥有所有相应的字段:电子邮件、密码、名字、姓氏- 因为我在注册时将需要它们,对吗?
但我也想使用 repeatPassword 字段来确认用户是否正确输入了密码,所以我会将其添加到 User 模型中:
@Required
@Transient
public String repeatPassword;
好的,然后我将扩展此模型以重复密码确认检查,以便在提交表单时更正我的“自动”验证,如下所示:
public String validate() {
if(!password.equals(repeatPassword)) {
return "Passwords doesn't match.";
}
return null;
}
}
所以即使现在我也会有一个额外的属性repeatPassword,它不会保存到数据库中,而是在注册时使用。
问题 1:我们的模型开始逐渐变得混乱。
在登录的情况下:我想使用相同的模型,因为它是一个正在尝试登录的用户,对吧?但我只需要电子邮件和密码,而不是所有字段。
问题#2:我的用户模型不能在登录中使用,因为它已经定制为在注册中使用 - 我需要移动 repeatPassword 和 validate() 方法来分离 UserRegistation 模型,加上重复的 firstName lastName 等字段或混合使用这两个 User和注册中的 UserRegistration 模型并将两种不同的表单呈现给相同的注册视图 = 令人困惑。
问题#3:我的登录页面不能使用用户模型,因为它有注释,如果我不添加所有必要的字段,如名字、姓氏等。我会得到错误。同样,我需要创建单独的 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 个不同的模型来表示用户,其中一个被持久化到数据库中,另外两个用于在我们在模板端完成登录和注册功能时验证错误。
所以我的问题是:我到底应该如何开始解决这个烂摊子?代码复杂性正在快速上升:) 我是否应该创建单独的 models.template 和 models.database 包,其中模板模型只是注释中的模型,并且在没有错误的情况下我开始填充真实模型,然后将其信息保存或更新到数据库?我迫切需要你们的答案,我们可以制作一种模型方法吗?提前谢谢。