通过流畅的验证,您可以在更新密码之前验证诸如NotNull,numberGreaterThan之类的简单事物或更高级的业务规则,例如userMustExistsOnDb。
我感觉当我使用流畅的验证时,我做的数量是DB调用的两倍,而不是使用它。这是一个例子。
public class DeleteCustomerRequestValidator: AbstractValidator<DeleteCustomerRequest> {
public DeleteCUstomerRequestValidator() {
RuleFor(customer => customer.Id).GreaterThan(0);
RuleFor(customer => customer.Id).Must(ExistsOnDB).WithMessage("The customer does not exists");
}
private bool ExistsOnDB(int customerId) {
// DB call to check if exists on Db
return Respository.Customers.Any(x => x.Id == customerId) // CALL NUMBER 1
}
}
这是我进行第二次调用的删除方法
public void DeleteCustomer(int customerId)
{
Customer customer = Repository.Customers.First(x => x.Id); // CALL NUMBER 2
Repository.Customers.Delete(customer)
Repository.Save()
}
但是如果我不使用Fluent验证,我会做只有一个电话来从DB获取客户。
public void DeleteCustomer(int customerId)
{
if (customerId < 1)
{
/// Return error.
}
Customer customer = Repository.Customers.FirstOrDefault(x => x.Id); // Only 1 CALL
if (customer == null)
{
// Return error.
}
Repository.Customers.Delete(customer)
Repository.Save()
}
我做错了什么?有没有更好的方法呢?
感谢您的时间。
答案 0 :(得分:0)
一般来说,我会说不,不要使用流利验证。
我认为你正在添加额外的复杂性/不必要的AbstractValidator类,其中一个简单的if就足够了。
对于类似“删除”的内容,是的,您将检查客户是否先存在。但MOST逻辑应该属于Customer类本身。因此,您不应该需要此外部验证器类。
答案 1 :(得分:0)
如果您想要一个IsValid和一个过程中发生的错误列表,则需要FluidValidation。在这种情况下,您将添加一个验证,表明整个删除成功,如果没有,验证将记录为什么不成功。但不是每行代码的验证。