Dto 和 Domain 模型的一致验证规则

bba*_*els 7 c# validation consistency fluentvalidation

我希望使用 FluentValidation 验证我的 Dto 和域模型。我已经定义了一个 Validator 类来验证我的 Dto,如下所示。

但是,如果我还想为我的域模型添加一个验证器,则其中一个验证器的更改不会反映在另一个中。就像,如果我将密码长度的规则从 6 更改为 7,我将不得不在两个地方更改它。

是否有某种方法可以潜在地从域模型或类似的东西继承规则,以在 Dto 和域模型之间实现一致的规则?

到:

public class NewUserDto
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
}

public class NewUserDtoValidator : AbstractValidator<NewUserDto>
{
    public NewUserDtoValidator()
    {
        RuleFor(x => x.FirstName).Length(2, 50);
        RuleFor(x => x.LastName).Length(2, 50);
        RuleFor(x => x.Email).EmailAddress();
        RuleFor(x => x.Username).Length(4, 25);
        RuleFor(x => x.Password).MinimumLength(6);
    }
}
Run Code Online (Sandbox Code Playgroud)

领域模型:

public class User
{
    public uint Id { get; private set; }

    public string Username { get; private set; }
    public string FirstName { get; private set; }
    public string LastName { get; private set; }
    public string Email { get; private set; }
    public DateTime RegistrationDate { get; private set; }
    public string Hash { get; private set; }
    public string Salt { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*sny -2

为了在实体之间共享相同的验证规则,您可以使用自定义验证器: https: //github.com/JeremySkinner/FluentValidation/wiki/e.-Custom-Validators