Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1. var validatore = new Validator();
  2.  
  3. validatore.AddRule<TestRule>("OK");
  4. validatore.AddRule<int>(45);
  5.  
  6. validatore.Validate();
  7.  
  8. public interface IValidationRule<T>
  9. {
  10. string Error { get; set; }
  11. bool Validate(T arg);
  12. }
  13.  
  14. public class TestRule : IValidationRule<string>
  15. {
  16. public string Error { get; set; }
  17. public bool Validate(string arg)
  18. {
  19. return arg == "test";
  20. }
  21. }
  22.  
  23. public interface IValidator
  24. {
  25. void AddRule<TRule>(dynamic arg);
  26. ValidationResult Validate();
  27. }
  28.  
  29. public class Validator : IValidator
  30. {
  31. public void AddRule<T>(dynamic arg)
  32. {
  33. ???
  34. }
  35.  
  36. public ValidationResult Validate()
  37. {
  38. forEach ...
  39. }
  40. }
  41.  
  42. public class ValidationResult
  43. {
  44. public bool HasError { get; set; } = false;
  45. public string ErrorText { get; set; } = "No error";
  46. public void SetError(string errorMsg)
  47. {
  48. this.HasError = true;
  49. ErrorText = errorMsg;
  50. }
  51. }
  52.  
  53. public interface IValidationRule
  54. {
  55. ValidationResult Validate();
  56. }
  57.  
  58. public class ValidationRule<T> : IValidationRule
  59. {
  60. private Func<T, ValidationResult> validatorFunc;
  61. private T validationSubject;
  62. public ValidationRule(T validationSubject, Func<T, ValidationResult> validatorFunc)
  63. {
  64. this.validationSubject = validationSubject;
  65. this.validatorFunc = validatorFunc;
  66. }
  67.  
  68. public ValidationResult Validate() => validatorFunc?.Invoke(validationSubject);
  69. }
  70.  
  71. public interface IValidator
  72. {
  73. void AddRule<T>(T validationSubject, Func<T, ValidationResult> validationFunc);
  74. ValidationResult Validate();
  75. }
  76.  
  77. public class Validator : IValidator
  78. {
  79. private readonly List<IValidationRule> rules = new List<IValidationRule>();
  80.  
  81. public void AddRule<T>(T validationSubject, Func<T,ValidationResult> validationFunc)
  82. {
  83. rules.Add(new ValidationRule<T>(validationSubject, validationFunc));
  84. }
  85.  
  86. public ValidationResult Validate()
  87. {
  88. foreach (var rule in rules)
  89. {
  90. var result = rule.Validate();
  91. if (result.HasError) return result;
  92. }
  93.  
  94. return new ValidationResult();
  95. }
  96. }
  97.  
  98. public class ValidatableObject
  99. {
  100. public int intValue;
  101. }
  102.  
  103. private void Test()
  104. {
  105. var target = new ValidatableObject();
  106. target.intValue = 1;
  107.  
  108. var validator = new Validator();
  109. validator.AddRule(target, (x) =>
  110. {
  111. var validationResult = new ValidationResult();
  112. if (x.intValue > 10) validationResult.SetError("Exceeds max value (10)");
  113. return validationResult;
  114. });
  115.  
  116. log(validator.Validate().ErrorText);
  117. target.intValie = 100;
  118. log(validator.Validate().ErrorText);
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement