ユーザー インターフェイスでドメイン オブジェクトを直接使用する必要があるかどうかはわかりません。たとえば、ユーザー ID、名前、パスワード、および役割のリストを持つドメイン エンティティ ユーザー ユーザーのユーザー インターフェイスを設計したいと考えています。エンティティは、無効な状態にならないように設計されています (無効なパスワードや空のユーザー ID など)。
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) 1 つのウィンドウのみを使用して、指定された userId、名前、パスワード、およびロールのリストを持つユーザーを作成することが望ましい場合があります。userId をまだ入力していなくても、ロールを追加できるはずです。
オプション 1 は、ユーザー インターフェイスでドメイン オブジェクトを直接使用できるため、実装が最も簡単です。しかし、ユーザー インターフェースは使いにくいものになる可能性があります。オプション 2 が望ましいですが、ドメイン オブジェクトを直接使用することはできません。ユーザーがまだ作成されていない場合、ロールを追加する方法がわかりません。userId を表す一時的な空のテキスト ボックスなど、その時点で正しい情報がない可能性があるため、ユーザーを作成できません。どうすればこれを達成できますか?
私が考えることができる唯一のクリーンなソリューションは、実際のドメイン オブジェクトの情報を模倣するユーザー インターフェイスで使用するクラスを作成することです。したがって、空のユーザーを作成して役割を追加し、その後で userId を設定できます。ユーザー インターフェイスは、その情報を使用して実際のドメイン オブジェクトを作成できます。
これを回避する簡単な方法はありますか?これは通常どのように管理されていますか?