提问人:bbartels 提问时间:2/4/2018 更新时间:2/4/2018 访问量:2726
DTO 和域模型的一致验证规则
Consistent validation rules for both Dto and Domain model
问:
我希望使用 FluentValidate 验证我的 Dto 和 Domain 模型。 我已经定义了一个 Validator 类来验证我的 Dto,如下所示。
但是,如果我还想为我的领域模型添加一个验证器,则其中一个验证器的更改不会反映在另一个验证器中。例如,如果我将密码长度的规则从 6 更改为 7,则必须在两个地方都更改它。
有没有某种方法可以潜在地从领域模型或类似的东西继承规则,以实现跨 Dto 和领域模型的一致规则?
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);
}
}
领域模型:
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; }
}
答:
-2赞
Vladislav Rastrusny
2/4/2018
#1
要在实体之间共享相同的验证规则,可以使用自定义验证程序: https://github.com/JeremySkinner/FluentValidation/wiki/e.-Custom-Validators
评论
0赞
kipusoep
1/31/2022
此答案缺少对如何在此方案中使用自定义验证程序的解释。
评论
class BaseUserValidator: AbstractValidator<IUser> {}