Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var validatore = new Validator();
- validatore.AddRule<TestRule>("OK");
- validatore.AddRule<int>(45);
- validatore.Validate();
- public interface IValidationRule<T>
- {
- string Error { get; set; }
- bool Validate(T arg);
- }
- public class TestRule : IValidationRule<string>
- {
- public string Error { get; set; }
- public bool Validate(string arg)
- {
- return arg == "test";
- }
- }
- public interface IValidator
- {
- void AddRule<TRule>(dynamic arg);
- ValidationResult Validate();
- }
- public class Validator : IValidator
- {
- public void AddRule<T>(dynamic arg)
- {
- ???
- }
- public ValidationResult Validate()
- {
- forEach ...
- }
- }
- public class ValidationResult
- {
- public bool HasError { get; set; } = false;
- public string ErrorText { get; set; } = "No error";
- public void SetError(string errorMsg)
- {
- this.HasError = true;
- ErrorText = errorMsg;
- }
- }
- public interface IValidationRule
- {
- ValidationResult Validate();
- }
- public class ValidationRule<T> : IValidationRule
- {
- private Func<T, ValidationResult> validatorFunc;
- private T validationSubject;
- public ValidationRule(T validationSubject, Func<T, ValidationResult> validatorFunc)
- {
- this.validationSubject = validationSubject;
- this.validatorFunc = validatorFunc;
- }
- public ValidationResult Validate() => validatorFunc?.Invoke(validationSubject);
- }
- public interface IValidator
- {
- void AddRule<T>(T validationSubject, Func<T, ValidationResult> validationFunc);
- ValidationResult Validate();
- }
- public class Validator : IValidator
- {
- private readonly List<IValidationRule> rules = new List<IValidationRule>();
- public void AddRule<T>(T validationSubject, Func<T,ValidationResult> validationFunc)
- {
- rules.Add(new ValidationRule<T>(validationSubject, validationFunc));
- }
- public ValidationResult Validate()
- {
- foreach (var rule in rules)
- {
- var result = rule.Validate();
- if (result.HasError) return result;
- }
- return new ValidationResult();
- }
- }
- public class ValidatableObject
- {
- public int intValue;
- }
- private void Test()
- {
- var target = new ValidatableObject();
- target.intValue = 1;
- var validator = new Validator();
- validator.AddRule(target, (x) =>
- {
- var validationResult = new ValidationResult();
- if (x.intValue > 10) validationResult.SetError("Exceeds max value (10)");
- return validationResult;
- });
- log(validator.Validate().ErrorText);
- target.intValie = 100;
- log(validator.Validate().ErrorText);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement