我不确定我是否应该直接在用户界面中使用域对象。例如,我希望为域实体用户User设计用户界面,它具有用户ID,名称,密码和角色列表。实体的设计是这样一种方式,它永远处于无效状态(例如无效的密码或空的UserID)域模型和用户界面
public class User {
public User(String userId, String name, String password) {
//Initialization and validation
}
public String getUserId {
/*implementation*/
}
public void changePassword(String oldPassword, String newPassword) {
/*Set new password if it complies with the rules
and if the the old one is correct*/
}
public void setName(String Name) {
/*implementation*/
}
public String getName() {
/*implementation*/
}
public List<Role> getRoles() {
/*implementation*/
}
public void addRole(Role role) {
/*implementation*/
}
}
什么是设计用户界面的最合适的方法是什么?
1)坚持域模型:设计3个窗口。窗口“新用户”使用给定的userId,名称和密码创建一个新用户。另一个窗口“更改密码”更改密码,另一个窗口“修改用户”允许您修改现有用户的名称和角色
2)可能希望仅使用一个窗口来创建具有给定userId,名称,密码和角色列表。即使我还没有输入userId,我应该可以添加角色。
选项1最容易实现,因为我可以直接在用户界面中使用域对象。但用户界面可能会导致使用痛苦。 选项2是可取的,但域对象不能直接使用。如果用户尚未创建,我看不到如何添加角色。我无法创建用户,因为那时我可能没有正确的信息,例如表示userId的临时空文本框。我怎样才能做到这一点?
我能想到的唯一一个干净的解决方案是创建类,以便在用户界面中使用,以模仿真实域对象中的信息。所以我可以创建一个空的用户来添加角色,然后设置userId。用户界面可以使用该信息来创建真实的域对象。
有没有简单的方法呢?这通常如何管理?