FluentValidation হলো .NET লাইব্রেরি স্ট্রংলি-টাইপড ভ্যালিডেশন রুল বিল্ড করার জন্য। এটি ফ্লুয়েন্ট ইন্টারফেস এবং ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে ভ্যালিডেশন রুল বিল্ড করে। এটি আপনার ডোমেইন কোড ক্লিন করে এবং আরও কোহেসিভ করে, সেইসাথে ভ্যালিডেশন লজিকের জন্য একক জায়গা দেয়।
FluentValidation ব্যবহার করতে নিচের প্যাকেজ ইনস্টল করতে হবে:
<PackageReference Include="FluentValidation" Version="9.2.2" />
উদাহরণ ১
static class Program
{
static void Main(string[] args)
{
List<string> errors = new List<string>();
PersonModel person = new PersonModel();
person.FirstName = "";
person.LastName = "S";
person.AccountBalance = 100;
person.DateOfBirth = DateTime.Now.Date;
PersonValidator validator = new PersonValidator();
ValidationResult results = validator.Validate(person);
if (!results.IsValid)
{
foreach (ValidationFailure failure in results.Errors)
errors.Add(failure.ErrorMessage);
}
foreach (var item in errors) Console.WriteLine(item);
Console.ReadLine();
}
}
public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public decimal AccountBalance { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class PersonValidator : AbstractValidator<PersonModel>
{
public PersonValidator()
{
RuleFor(p => p.FirstName)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("{PropertyName} is Empty")
.Length(2, 50).WithMessage("Length ({TotalLength}) of {PropertyName} Invalid")
.Must(BeAValidName).WithMessage("{PropertyName} Contains Invalid Characters");
RuleFor(p => p.LastName)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("{PropertyName} is Empty")
.Length(2, 50).WithMessage("Length ({TotalLength}) of {PropertyName} Invalid")
.Must(BeAValidName).WithMessage("{PropertyName} Contains Invalid Characters");
}
protected bool BeAValidName(string name)
{
name = name.Replace(" ", "").Replace("-", "");
return name.All(Char.IsLetter);
}
}
আউটপুট
First Name is Empty
Length (1) of Last Name Invalid
ব্যাখ্যা: CascadeMode.StopOnFirstFailure মানে প্রথম ফেইল হলে বাকি রুল চেক করা হবে না। NotEmpty, Length, Must চেইন করে কমপ্লেক্স রুল বানানো যায়। FluentValidation ASP.NET Core-এ বিল্ট-ইন সাপোর্ট পায় (AddFluentValidation)।