对于我的两分钱,我会说您的模型要么处于有效状态(应用所有验证标准),要么不是。如果在某些情况下,您不想应用验证,那么我认为您真的应该使用单独的模型(实际上是 ViewModel)。
在您的示例中,我将创建一个RegisterViewModel
用于注册和一个单独EditUserViewModel
的用于更改详细信息。然后,它们中的每一个都有自己的验证,并且他们将承担单一的责任。
创建一个在许多不同视图中重用的胖模型,恕我直言,有点代码味道。我有很多理由这么想。首先,假设您有一个模型用于与用户数据的所有交互。它看起来像这样:
public class UserModel
{
public int UserId { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public bool IsAdministrator { get; set; }
}
稍后您决定跟踪在网站注册期间使用的浏览器。你在哪里添加?它真的与用户无关,所以它不应该放在UserModel
模型上。如果您有一个单独的RegisterViewModel
,您可以在您的注册过程发生变化时根据需要对其进行修改,而不用担心它会如何影响使用它的其他地方。
例如,如果您将上述模型与 MVC 的 DefaultModelBinder 一起使用,则会出现更严重的问题。如此处所述,即使您没有IsAdministrator
表单上的字段(通过利用批量分配漏洞),用户也可以创建自己的请求并授予自己管理员权限。同样,如果在没有该属性的情况下使用单独的 ViewModel IsAdministrator
,它将减少安全漏洞的表面积。
以上只是一个例子,但我相信你明白了。