FluentValidation - POCO с правилами, которые зависят от значений, хранящихся в базе данных. Как справиться с этим дизайном?
Я использую FluentValidator для проверки достоверности части автомобиля. Есть некоторые числовые переменные, которые иногда должны быть больше 0, когда? Когда в базе данных строка для такого рода части имеет некоторые значения.
Я хочу, чтобы класс CarItem был как можно проще. В идеале это будет POCO со свойством IsValid.
Проблема, которую я думаю, что я должен сделать какую-то инъекцию репозитория в 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) ;
}
}
}