我正在构建的 Web 应用程序的一部分是用户管理。因此我需要一个用户实体。有几个涉及用户的用例,例如:
- 显示用户列表
- 显示单个用户
- 编辑用户联系信息
- 编辑用户登录信息(用户名和密码)
- 创建一个新用户
其中大多数需要访问相同的属性,因此在所有情况下使用相同的实体会很好。然后,如果我使用例如 DisplayName 属性,所有地方都将使用相同的显示名称:
[Display(Name = "Username")]
public string Username { get; set; }
编辑用户时,我也想使用验证属性:
[Display(Name = "Username")]
[Required(ErrorMessage = "Username must be provided.")]
public string Username { get; set; }
当我有一个编辑了某些属性但不是全部属性的视图时,就会出现问题。在“编辑用户联系信息”用例中,有些东西可以编辑(例如电话号码),但有些东西不能(例如用户名)。但是如果我使用相同的实体,所有具有验证属性的属性都将被验证。
我在 StackOverflow 上找到了一些验证问题的解决方案,但我想知道在创建实体和视图模型时是否有任何“最佳实践”?
我更喜欢尽可能多地重复使用,以确保例如显示名称和验证在整个应用程序中保持一致。但通常这会导致诸如上述问题或复杂的继承层次结构之类的问题。
我应该有:
- 几个相似(但不相同)的实体?
- 几个相似(但不相同)的视图模型?
- 一个实体+验证问题等问题的解决方法?
- ...
有什么建议么?你自己如何做到这一点?
我应该注意,我经常显示的信息不仅仅是正在编辑的内容。例如,在编辑联系信息时,我将输入一些属性(例如 PhoneNumber 和 EmailAddress),但仍将其他属性作为信息显示给用户(例如用户名)。
(如果重要的话,我正在使用 ASP.NET MVC 3)