FluentValidation - 具有依赖于存储在数据库中的值的规则的POCO。如何处理这种设计?

时间:2018-06-05 14:24:33

标签: winforms validation fluentvalidation

我正在使用FluentValidator来验证一块CAR的有效性。 有些数值变量有时应该大于0,何时? 在数据库中,那种作品的行有一些值。

我希望CarItem类尽可能简单。理想情况下,它将是具有IsValid属性的POCO。

我认为我应该对POCO进行某种存储库注入以获取验证器规则的问题。 你为此建议给我什么样的设计模式? 我不太喜欢需要向实体注入存储库,因为它变得复杂了....

public class CarPiece //this tries to be a POCO!!
{
    public double HP{ get; set; }
    public double EngineConsumtion{ get; set; }

    public bool IsValid {
        get
        {
            CarPieceValidator carpieceValidator = new CarPieceValidator();
            ValidationResult results = carpieceValidator .Validate(this);
            return results.IsValid;
        }
    }
    public List<string> ValidationErrors
    {
        get
        {
            CarPieceValidator carpieceValidator = new CarPieceValidator ();
            ValidationResult results = carpieceValidator .Validate(this);
            return results.Errors.Select(x => x.ErrorCode +" "+ x.ErrorMessage ).ToList();
        }
    }


    public class CarPieceValidator : AbstractValidator<CarPiece>
    {

        public CSOItemSupplierValidator(IRepository repository)
        {
            foreach(IConfig configuration in repository.Configurations)
            {
               RuleFor(item => item.HP).LessThanOrEqualTo(configuration.MaxHp).When(item.Id= configuration==id) ;
            }

        }
    }

0 个答案:

没有答案