1

我很迷失在这里。我知道如何使用验证,并且我目前在每个项目中都使用 FluentValidation。但是每次制作新模型时都会出现一个问题 -我应该只验证用户输入字段还是所有字段?

例子

[Validator(typeof(ChatClientValidator))]
public class ChatClient
{
    public int ID { get; set; }
    public string IP { get; set; } // Generated on server
    public int ChatSessionID { get; set; }
    public virtual ChatSession ChatSession { get; set; }
    public string Name { get; set; } // Client field
    public string Email { get; set; } // Client Field
}

public class ChatClientValidator : AbstractValidator<ChatClient>
{
    public ChatClientValidator()
    {
        RuleFor(x => x.Name).NotEmpty().WithMessage("Name is required");
        RuleFor(x => x.Email).NotEmpty().WithMessage("E-Mail is required").EmailAddress().WithMessage("Enter correct E-Mail address");
    }
}

我是否应该验证 IP、DateTime 等字段(在我的服务器端控制器上生成的字段?

4

3 回答 3

0

我将有一个视图模型,它可以在您的视图中直接表示您的字段。我只会验证我的视图模型字段。这当然是如果您还将更新的视图模型映射到域实体。

一旦你验证了你的视图模型然后映射到你的域实体,你的代码然后将你的域实体发送到其他层以更新到数据库。

在映射视图模型之前,您会返回并从数据库中获取现有域模型并将更改的视图模型字段映射到其中。

然后,您应该使用流利的验证或任何其他验证机制来验证整个域模型。

显然,如果您唯一的实体是您的视图模型,那么您需要在它到达数据库之前验证其上的每个字段。

于 2013-02-13T01:43:05.023 回答
0

您应该验证所有字段。众所周知,编码员会犯错误,添加一些验证或断言语句会增加另一层保证,即您的软件按预期执行。

于 2013-02-12T14:31:41.553 回答
0

我喜欢在模型回发到服务器后验证处理所需的所有字段。这里的逻辑是每个“ViewModel”类可以被多个视图使用,然后每个视图将显示模型的不同方面,并更改表单上显示(和隐藏)的数据会更改回发的值。不在视图中的任何字段都会将 null 或一些无效值(String.Empty 或 0 或 DateTime.MinValue 等)回发到控制器。

通过验证您需要处理的字段,您可以确保其他开发人员不会忘记添加必要的字段,而不用于处理的“只读”字段可以安全地回发为 null。

例如:我经常添加List<SelectListItem>属性以包含我可能不会验证的下拉信息,也不会在您的示例中验证 ChatSession(假设它用于设置其他值可以替换为 ChatSessionID 并且 ChatSession 主要是为了方便/展示)。但是我经常忘记为 ID 添加一个隐藏字段,所以我将它们标记为 [必需] 以确保它始终存在于我的回发中。

于 2013-02-12T14:45:42.013 回答