我不确定我是否应该直接在用户界面中使用域对象。例如,我希望为域实体用户 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个窗口。窗口“新用户”使用给定的用户 ID、名称和密码创建一个新用户。另一个窗口“更改密码”用于更改密码,另一个窗口“修改用户”允许您修改现有用户的名称和角色
2) 最好只使用一个窗口来创建具有给定用户 ID、名称、密码和角色列表的用户。即使我还没有输入 userId,我也应该能够添加角色。
选项 1 是最容易实现的,因为我可以直接在用户界面中使用域对象。但是用户界面可能会导致使用起来很痛苦。选项 2 是可取的,但域对象不能直接使用。如果尚未创建用户,我看不到如何添加角色。我无法创建用户,因为当时我可能没有正确的信息,例如代表 userId 的临时空文本框。我怎样才能做到这一点?
我能想到的唯一干净的解决方案是创建在用户界面中使用的类,这些类将模仿真实域对象中的信息。所以我将能够创建一个空用户来添加角色,然后设置 userId。用户界面可以使用该信息来创建真正的域对象。
有没有简单的方法解决这个问题?这通常是如何管理的?