元程序流畅的验证

时间:2014-05-28 13:32:16

标签: fluentvalidation

我使用了流畅的验证来验证这样的硬编码:

RuleFor(customer => customer.CreditLimit).GreaterThan(customer => customer.MinimumCreditLimit);

我想在代码中用某个(元)数据库驱动的值替换MinimumCreditLimit不会有问题。是否有人尝试过这种情况以及在这种情况下最佳做法是什么(除了MinimumCreditLimit可能源于某种策略设计模式的事实)。是否有人可能会使用表达式树来进行流畅的验证,以使其更加元化程序?

1 个答案:

答案 0 :(得分:1)

嗯,最简单的方法是在验证类中添加一个ctor。

public class EntityValidator : AbstractValidator<Entity> {
  public EntityValidator(int minimumCreditLimit) {
         Rulefor(customer => customer.CreditLimit).GreaterThan(minimumCreditLimit); 
  }
}

现在您可以像这样使用它(如果您不使用“属性”方式)。

var minimumCreditLimit = <GetTheLimitFromDbWithAnyMethod>();
var validator = new EntityValidator(minimumCreditLimit);
<yourEntityInstance>.ValidateAndThrow(validator);

另一种(类似的)方式是通过某种方式将数据从db获取到验证器(例如在ctor中),并创建一个自定义验证器/扩展方法来使用它。