私が構築している Web アプリケーションの一部は、ユーザー管理です。したがって、ユーザーエンティティが必要です。ユーザーが関与するいくつかの使用例があります。たとえば、次のとおりです。
- ユーザーのリストを表示する
- 1 人のユーザーを表示する
- ユーザーの連絡先情報を編集する
- ユーザーのログイン情報(ユーザー名とパスワード)の編集
- 新しいユーザーを作成する
これらのほとんどは同じプロパティにアクセスする必要があるため、すべてのケースで同じエンティティを使用すると便利です。次に、たとえば DisplayName 属性を使用すると、すべての場所で同じ表示名が使用されます。
[Display(Name = "Username")]
public string Username { get; set; }
ユーザーを編集するときは、検証属性も使用したいと思います。
[Display(Name = "Username")]
[Required(ErrorMessage = "Username must be provided.")]
public string Username { get; set; }
この問題は、すべてではなく一部のプロパティが編集されているビューがある場合に発生します。「ユーザーの連絡先情報の編集」ユース ケースでは、編集できるもの (PhoneNumber など) と編集できないもの (Username など) があります。しかし、同じエンティティを使用すると、検証属性を持つすべてのプロパティが検証されます。
StackOverflow で検証の問題に対するいくつかの解決策を見つけましたが、エンティティとビューモデルを作成するときに「ベスト プラクティス」があるかどうか疑問に思っています。
たとえば、表示名と検証がアプリケーション全体で一貫していることを確認するために、できるだけ再利用することを好みます。しかし、それは多くの場合、上記のような問題や複雑な継承階層につながります。
私が持っている必要があります:
- いくつかの類似した (しかし同一ではない) 実体?
- いくつかの類似した (しかし同一ではない) ビューモデル?
- 1 つのエンティティ + 検証の問題などの問題の回避策?
- ...
助言がありますか?どうやってこれを自分で行うのですか?
編集中のものだけでなく、より多くの情報を表示することが多いことに注意してください。たとえば、連絡先情報を編集する場合、いくつかのプロパティ (PhoneNumber や EmailAddress など) の入力がありますが、他のプロパティはユーザーへの情報として表示されます (Username など)。
(問題があれば ASP.NET MVC 3 を使用しています)