Valitators¶
In most of scenarios, you might not want to create new instance of IValitRules<TObject>
for each new object. It’s better to have one class responsible for handling the validation for the particular type. Using other words, it’s better to have a valitator ;)
Valit offers three ways of creating a valitators for a particular type:
- Transforming
IValitRules<TObject>
object usingCreateValitator()
method. - Transforming
IValitRulesProvider<TObject>
object usingCreateValitator()
method. - Creating class which implements
IValitator<TObject>
interface
IValitator<TObject>
object provides Validate()
method which accepts two arguments:
TObject @object
- object of the particular type for validationIValitStrategy strategy
- strategy for validation process. If this argument is not given, Complete strategy is picked as a default.
Let’s say we’d like to create a valitator for the following type:
public class RegisterModel
{
public string Email { get; set; }
public string Password { get; set; }
public ushort Age { get; set ;}
}
Below you can find three mentioned ways of doing that.
Creating valitator from rules¶
class RegistrationService
{
private readonly IValitator<RegisterModel> _registerModelValitator;
public RegistrationService()
{
_registerModelValitator = CreateValitator();
}
public bool Register(RegisterModel model)
{
var result = _registerModelValitator.Validate(model);
if(!result.Succeeded)
{
return false;
}
...
}
private IValitator<RegisterModel> CreateValitator()
=> ValitRules<RegisterModel>
.Create()
.Ensure(m => m.Email, _=>_
.Required()
.Email())
.Ensure(m => m.Password, _=>_
.Required()
.MinLength(10))
.Ensure(m => m.Age, _=>_
.IsGreaterThan(16))
.CreateValitator();
}
Creating valitator class¶
class RegistrationService
{
private readonly IValitator<RegisterModel> _registerModelValitator;
public RegistrationService()
{
_registerModelValitator = new RegisterModelValitator();
}
public bool Register(RegisterModel model)
{
var result = _registerModelValitator.Validate(model);
if(!result.Succeeded)
{
return false;
}
...
}
}
class RegisterModelValitator : IValitator<RegisterModel>
{
private readonly IValitRulesStrategyPicker<TObject> _strategyPicker;
public RegisterModelValitator()
{
var rules = GetValidationRules();
_strategyPicker = ValitRules<RegisterModel>.Create(rules);
}
public IValitResult Validate(RegisterModel @object, IValitStrategy strategy)
{
var selectedStrategy = strategy ?? new CompleteValitStrategy();
return _strategyPicker
.WithStrategy(selectedStrategy)
.For(@object)
.Validate();
}
private IValitRulesStrategyPicker<RegisterModel> GetValidationRules()
=> ValitRules<RegisterModel>
.Create()
.Ensure(m => m.Email, _=>_
.Required()
.Email())
.Ensure(m => m.Password, _=>_
.Required()
.MinLength(10))
.Ensure(m => m.Age, _=>_
.IsGreaterThan(16))
.GetAllRules();
}