Fluent Validation Nedir? .NET Core’da Fluent Validation Kullanımı
Fluent validation, bir nesnenin geçerli olup olmadığını kontrol ederek ilgili nesne üzerinde doğrulama işlemlerini gerçekleştirmek amacıyla kullanılan popüler bir doğrulama kütüphanesidir. Fluent Validation, validasyon işlemlerinin basit, okunabilir ve genişletilebilir bir şekilde gerçekleştirilmesini sağlamaktadır.

Erdoğancan Yüksel
2 dakika 21 saniye okuma süresi

Fluent Validation Nedir? .NET Core’da Fluent Validation Kullanımı

Erdoğancan Yüksel
2 dakika 21 saniye okuma süresi
Fluent validation, bir nesnenin geçerli olup olmadığını kontrol ederek ilgili nesne üzerinde doğrulama işlemlerini gerçekleştirmek amacıyla kullanılan popüler bir doğrulama kütüphanesidir. Fluent Validation, validasyon işlemlerinin basit, okunabilir ve genişletilebilir bir şekilde gerçekleştirilmesini sağlamaktadır.

Fluent Validation Nedir?
Fluent Validation, .NET uygulamalarında kullanıcı girdilerinin kolay ve sade bir şekilde doğrulanmasını sağlayarak validasyon işlemlerini basit, okunabilir ve kolayca genişletilebilir bir şekilde gerçekleştirilmesini sağlamaktadır.
Fluent validation kullanımının en önemli avantajlarından birisi nesne yönelimli programlamada model doğrulama işlemleri için kompleks şartların gerektiği durumlarda if-else kullanımının karmaşıklığını ortadan kaldırılabilmesidir.
Fluent Validation Kurulumu
NuGet paket yöneticisi kullanılarak Fluent Validation kütüphanesini projeye eklemek için aşağıdaki komut kullanılabilir:
-> Install-Package FluentValidation
.NET CLI kullanrak terminal üzerinden yüklemek için:
-> dotnet add package FluentValidation
Veya Solution üzerinden “Manage Nuget Packages for Solution” seçeneğine tıklayarak aşağıdaki görseldeki kütüphaneleri projenize ekleyebilirsiniz.
Fluent Validation Kullanımı
İlgili özelliğin programın derlemesi sırasında görünmesi için Startup.cs sınıfınınConfigureServices metodunda AddFluentValidation eklentisini kullanarak geçerlilik kurallarını tanımlayabilirsiniz:
public void ConfigureServices(IServiceCollection services)
{
// FluentValidation ekliyoruz
services.AddControllers()
.AddFluentValidation(fv =>
{
// Belirli bir assembly'den doğrulayıcıları tarayıp ekler
fv.RegisterValidatorsFromAssemblyContaining<Startup>();
});
// Ayrıca manuel olarak bir doğrulayıcı ekleyebilirsiniz
services.AddScoped<IValidator<User>, UserValidator>();
}
.NET 6.0 versiyonundan sonra Startup.cs bulunmadığından dolayı Program.cs'te kullanımı:
var builder = WebApplication.CreateBuilder(args);
// Fluent Validation'ı servis koleksiyonuna ekliyoruz
builder.Services.AddControllers()
.AddFluentValidation(config =>
{
// Tüm Validator sınıflarını otomatik olarak tarayıp kaydeder
config.RegisterValidatorsFromAssemblyContaining<Program>();
});
// Servis kayıtları
builder.Services.AddScoped<IValidator<UserRegistrationModel>, UserRegistrationValidator>();
var app = builder.Build();
Bir sınıf üzerinde validasyon işlemi uygulanması için öncelikle AbstractValidator sınıfından türeyen bir sınıf oluşturulması gerekmektedir.
using FluentValidation;
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public int Age { get; set; }
public string Password { get; set; }
public string PhoneNumber { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class UserValidator : AbstractValidator<User>
{
public UserValidator()
{
RuleFor(x => x.FirstName)
.NotEmpty().WithMessage("Ad alanı boş bırakılamaz.")
.Length(2,50).WithMessage("Ad alanı en az 2 en fazla 50 karakter olmalıdır.");
RuleFor(x => x.LastName)
.NotEmpty().WithMessage("Soyad alanı boş bırakılamaz.")
.Length(2,50).WithMessage("Soyad alanı en az 2 en fazla 50 karakter olmalıdır.");
RuleFor(x => x.Email)
.NotEmpty().WithMessage("E-posta alanı boş bırakılamaz.")
.EmailAddress().WithMessage("Geçerli bir e-posta adresi giriniz.");
RuleFor(x => x.Age)
.NotEmpty().WithMessage("Yaş alanı boş bırakılamaz.")
.InclusiveBetween(18, 99).WithMessage("Yaş 18 ile 99 arasında olmalıdır.");
RuleFor(x => x.Password)
.NotEmpty().WithMessage("Password alanı boş bırakılamaz.")
.MinimumLength(6).WithMessage("Şifreniz en az 6 karakterden oluşmalıdır.");
RuleFor(x => x.PhoneNumber)
.NotEmpty().WithMessage("Telefon numarası boş bırakılamaz.")
.Matches(@"^\+(?:[0-9] ?){6,14}[0-9]$").WithMessage("Geçerli bir telefon numarası giriniz.");
RuleFor(x => x.DateOfBirth)
.NotEmpty().WithMessage("Doğum tarihi alanı gereklidir.")
.Must(BecomeAnAdultRule).WithMessage("Yetişkin olmadığınız için kayıt olamazsınız.");
}
private bool BecomeAnAdultRule(DateTime dateOfBirth)
{
int currentYear = DateTime.Today.Year;
int birthYear = dateOfBirth.Year;
return currentYear - birthYear >= 18;
}
}
Oluşturulan kuralların bir sınıf üzerinde uygulandığı kod örneği:
// Kullanımı
User user = new User
{
FirstName = "Test",
LastName = "Test",
Email = "john.doe@example.com",
Age = 19,
Password = "12345", // Hatalı: Minimum uzunluk 6 olmalı
PhoneNumber = "+90055555555",
DateOfBirth = new DateTime(2010, 1, 1) // Hatalı: Yaşı 18'den küçük
};
UserValidator validator = new UserValidator();
var result = validator.Validate(user);
if (!result.IsValid)
{
foreach (var error in result.Errors)
{
Console.WriteLine($"Hatalı girilen alan: {error.PropertyName}, Hata: {error.ErrorMessage}");
}
}
// # Output
Hatalı girilen alan: Password, Hata: Şifreniz en az 6 karakterden oluşmalıdır.
Hatalı girilen alan: DateOfBirth, Hata: Yetişkin olmadığınız için kayıt olamazsınız.
Sonuç olarak Fluent Validaton kullanarak doğrulama işlemleri esnek ve okunabilir hale getirilebilir. Standart doğrulama kurallarının yanı sıra özelleştirilmiş kurallar da eklenerek veri doğrulaması yapılabilmektedir.