FluentValidation bu - C# dasturida foydalanuvchidan olingan ma'lumotlarni mahsus qoidalar asosida tekshiradigan kutubhona
FluentValidation’da siz har bir model yoki DTO uchun alohida validator klass yaratasiz. Har bir validator klass AbstractValidator<T> dan meros oladi va unda RuleFor(...) metodlari orqali validatsiya qoidalari ketma-ket yoziladi.
Bu klasslar faqat sintaksis jihatdan emas, semantik jihatdan ham kuchli: ular kodni o‘qiladigan shartlar matniga aylantiradi.
RuleFor(x => x.Email)
.NotEmpty().WithMessage("Email bo‘sh bo‘lmasligi kerak.")
.EmailAddress().WithMessage("Email noto‘g‘ri formatda.");Bu nafaqat tekshiruv, balki inson o‘qiy oladigan "dasturiy qonunlar" dir.
FluentValidation imkoniyatlarini 5 ta toifa orqali baholash mumkin:
Qoidalar zanjirsimon (chainable) metodlar orqali aniqlanadi. Bu validatsiyani deklarativ va o‘qiladigan qiladi.
Qoidalarni holatlarga qarab qo‘llash mumkin:
RuleFor(x => x.Discount)
.GreaterThan(0).When(x => x.IsStudent);Har qanday qoidani CustomValidator sifatida alohida komponentga ajratish mumkin.
RuleFor(x => x.Address).SetValidator(new AddressValidator());Tashqi xizmatlar bilan ishlash uchun:
RuleFor(x => x.Email)
.MustAsync(async (email, cancellation) => await userService.IsEmailUnique(email));Professional yondashuvda validator bu — kirish darajasidagi mustaqil qatlam. Uning vazifasi:
- DTO’ni domen modelga aylantirishdan oldin filtrlash;
- Kirish ma’lumotlarining ishonchliligini ta’minlash;
- Domen qatlamini noto‘g‘ri qiymatlardan himoya qilish.
Misol:
public class CreateUserCommandValidator : AbstractValidator<CreateUserCommand>
{
public CreateUserCommandValidator()
{
RuleFor(x => x.Name).NotEmpty();
RuleFor(x => x.Age).InclusiveBetween(18, 65);
}
}dotnet add package FluentValidation.AspNetCorebuilder.Services.AddControllers();
builder.Services.AddValidatorsFromAssemblyContaining<UserDtoValidator>();
builder.Services.AddFluentValidationAutoValidation();[Fact]
public void Name_Should_Be_Required()
{
var validator = new UserDtoValidator();
var result = validator.Validate(new UserDto { Name = "" });
Assert.False(result.IsValid);
Assert.Contains(result.Errors, e => e.PropertyName == "Name");
}FluentValidation bu oddiy tekshiruv kutubxonasi emas. U — .NET arxitekturangizda kiruvchi ma’lumotlarni semantik jihatdan toza, shartli va ifodali shaklda filtrlovchi mustahkam mexanizm. U yordamida siz:
- Validatsiyani modullashtirasiz;
- Kodni testlashni soddalashtirasiz;
- Domen qatlamini ishonchli saqlaysiz;
- Va eng muhimi — biznes qoidalarni kodga aylantirasiz.
FluentValidation bu — qoidalarning sintaktik emas, semantik vakili.