C#'da FluentValidation - Güçlü Ancak Kolay Veri Doğrulama Aracı
[[academy-video-youtube({"vid": "Zh1ccvTFzs8", "start_time": "0", "title": "C#'ta Fluent Validation - Güçlü ve Kolay Veri Doğrulama Aracı", "creator": "Tim Corey", "length": "43m 58s"})]]
Veri doğrulama, güvenilir yazılım geliştirme için temel unsurlardan biridir ve modern .NET uygulamalarında bunu sağlam, bakımı kolay ve ölçeklenebilir bir şekilde ele almanız gerekir. İşte tam burada, güçlü türde doğrulama kuralları oluşturmak için popüler bir .NET kütüphanesi olan FluentValidation devreye girer.
Tim Corey, "Fluent Validation in C# – The Powerful Yet Easy Data Validation Tool" adlı detaylı video eğitiminde izleyicilere FluentValidation kullanım sürecini adım adım anlatıyor. Bu makalede, Tim'in anlattıklarını takip ederek, ana noktaları ve kod örneklerini özetleyecek, özel doğrulayıcılar, doğrulayıcıları zincirleme, ASP.NET entegrasyonu ve .NET Core 3.1 ve .NET Standard 2.0 gibi daha eski çalışma zamanlarına destek gibi ilgili kavramları entegre edeceğiz.
Giriş: Neden FluentValidation?
Tim, verilerin doğrulanmasının sıklıkla tekrarlayıcı ve dağınık hale geldiğini açıklayarak videoya başlıyor. Örneğin, benzer doğrulama kurallarını bir projenin farklı bölümlerine kopyalayıp yapıştırmak, DRY (Kendini Tekrar Etme) ilkesini ihlal eder. Bunun yerine, FluentValidation adlı .NET doğrulama kütüphanesini tanıtıyor, bu kütüphane ücretsiz, güçlü ve sahip olmadığınız modellerde bile çalışarak ticari projeler için ideal hale gelmektedir.
Tim, öğrendiğiniz şeyleri uygulamanın önemini vurguluyor ve izleyicileri becerilerini geliştirmek için Weekly Challenge serisine yönlendiriyor.
Demo Uygulaması Genel Bakış
Tim, bir kullanıcının girdi yapabileceği bir WinForms demo uygulaması kullanıyor:
Ad
Soyad
Hesap Bakiyesi
- Doğum Tarihi
Bu bir kullanıcı arayüzü demosu olmasına rağmen, doğrulama ilkeleri ASP.NET Core, API testleri ve hatta konsol uygulamaları için de eşit derecede geçerlidir.
Kullanıcı Girdisine Güvenmenin Tehlikesi
Bu noktada, Tim geliştiricilere hatırlatıyor: "Kullanıcıya asla güvenmeyin." Girdi genellikle öngörülemez olabilir, yaş için 10 yerine "on" yazmak gibi. Girdinin doğrulanması, veritabanına kaydedilmeden önce esastır.
Örnek doğrulama kurallarını belirtir:
Ad ve soyad boş olmamalıdır.
- Hesap bakiyesi, mali sponsorluk için minimum gereksinim gibi finansal kurallara uymalıdır.
Doğum tarihi gelecekte olmamalı veya 120 yaşından büyük olmamalıdır.
Doğrulama Mantığı Nerede Olmalı?
Tim doğrulayıcıları yapılandırma seçeneklerini keşfeder:
UI formunun içinde
Veri ek açıklamalarını kullanarak model sınıfında
- FluentValidation kullanarak ayrı bir doğrulama sınıfında
Veri açıklamalarının sınırlı olduğunu ve genellikle harici kütüphanelerle çalışırken veya daha özelleştirilmiş doğrulama mantığına ihtiyaç duyulduğunda uygun olmadığını belirtiyor.
FluentValidation Kurulumu
Tim, Visual Studio kullanarak projesine NuGet aracılığıyla FluentValidation ekler. 8.1.0 sürümünü kurar ancak FluentValidation'ın çapraz platform olduğunu ve şu sistemlerle uyumlu olduğunu belirtir:
.NET Standard 2.0
.NET Core
ASP.NET
WPF
Xamarin
- Ve daha fazlası
Tim'in yapılandırması, .NET Core 3.1 ve daha eski sürümleri destekleyen FluentValidation 11 dahil olmak üzere, daha eski çalıştırma sürelerine destek ihtiyacı olanlar için de çalışır.
Bir Doğrulayıcı Sınıfı Oluşturma
Tim, yeni bir sınıf oluşturarak güçlü tipte doğrulama kuralları oluşturmayı gösteriyor:
public class PersonValidator : AbstractValidator<Person>public class PersonValidator : AbstractValidator<Person>Bu sınıf, Person modeli için tüm doğrulama mantığını içerir. Akıcı arayüzü kullanarak, doğrulama kuralları yapıcı içinde tanımlanır.
İlk Doğrulama Kuralı: Ad
Tim, bir lambda ifadesi kullanarak bir kural yazar:
RuleFor(p => p.FirstName).NotEmpty();RuleFor(p => p.FirstName).NotEmpty();O, Person nesnesini doğrulamak için bir var doğrulayıcı kullanır:
var validator = new PersonValidator();
ValidationResult results = validator.Validate(person);var validator = new PersonValidator();
ValidationResult results = validator.Validate(person);Daha sonra, doğrulama hatalarından herhangi birini kullanıcının anlayabileceği mesajları bir liste kutusunda görüntülemek için döngü yapar.
Dize Uzunluğu ve Özel Mesajlar
Tim, doğrulama kuralını genişletiyor:
RuleFor(p => p.FirstName)
.NotEmpty().WithMessage("First name is empty")
.Length(2, 50).WithMessage("Length of first name is invalid");RuleFor(p => p.FirstName)
.NotEmpty().WithMessage("First name is empty")
.Length(2, 50).WithMessage("Length of first name is invalid");Bu kural, zincirleme doğrulayıcılar kullanarak ismin ne boş ne de çok kısa/uzun olmasını sağlar. Tim, validasyonun ilk hatada durmasını sağlamak için Cascade (CascadeMode.Stop) kullanır.
Özel Doğrulama: İsimlerde Geçerli Karakterler
Tim, bir yöntemi kullanarak özel bir doğrulayıcı uygular:
private bool BeAValidName(string name)private bool BeAValidName(string name)Bu, boşlukları ve çizgileri kaldırır ve yalnızca Unicode harflerini içeren bir dize sağlar, böylece uluslararası karakterleri destekler.
Özel kural şu şekilde uygulanır:
.Must(BeAValidName).WithMessage("{PropertyName} contains invalid characters");.Must(BeAValidName).WithMessage("{PropertyName} contains invalid characters");Bu yöntem yapısı, özel bir posta kodu doğrulama mantığı fonksiyonu gibi diğer alanlara uyarlamak için mükemmeldir:
private bool BeAValidPostcode(string postcode)
{
// Add custom logic here to specify a valid postcode format
}private bool BeAValidPostcode(string postcode)
{
// Add custom logic here to specify a valid postcode format
}Bunu bir doğrulayıcıda şöyle kullanabilirsiniz:
RuleFor(c => c.Postcode).Must(BeAValidPostcode)
.WithMessage("Please specify a valid postcode");RuleFor(c => c.Postcode).Must(BeAValidPostcode)
.WithMessage("Please specify a valid postcode");Bu, public class CustomerValidator veya başka alanlara özgü doğrulayıcı gerektiren ticari projelerde yaygındır.
Hata Mesajlarında Yerleşik Değişkenleri Kullanma
Tim, mesajları dinamik olarak `` gibi yer tutucularla nasıl geliştirebileceğini gösteriyor:
{PropertyName}{ToplamUzunluk}{MinLength}ve{MaxLength}
Bu, aşağıdaki gibi bağlamsal hata mesajlarıyla sonuçlanır:
"Length of First Name is invalid (was 105)""Length of First Name is invalid (was 105)"Bu, kullanıcıların giriş hatalarını düzeltmesini kolaylaştırır.
Soyadı ve Yerelleştirme
Tim, {PropertyName} ile yeniden kullanılabilir biçimlendirme sayesinde FirstName doğrulama mantığını LastName için kopyalar. O ayrıca, çoklu dil desteğine ihtiyaç duyan ASP.NET veya küresel uygulamalar için WithLocalizedMessage()'i belirtmektedir.
Önemli: CascadeMode Kural İçin Özeldir
Tim, CascadeMode.Stop'un tüm model genelinde değil, bireysel kurallar için geçerli olduğunu açıklıyor. Hem FirstName hem de LastName boş ise, CascadeMode ayarlanmış olsa bile her iki kural da tetiklenecektir.
Doğum Tarihi Doğrulaması
Sonra, Tim doğum tarihinin gerçekçi olmasını sağlamak için bir kural ekler:
private bool BeAValidAge(DateTime dob)
{
var currentYear = DateTime.Now.Year;
var dobYear = dob.Year;
return dobYear <= currentYear && dobYear > (currentYear - 120);
}private bool BeAValidAge(DateTime dob)
{
var currentYear = DateTime.Now.Year;
var dobYear = dob.Year;
return dobYear <= currentYear && dobYear > (currentYear - 120);
}Şu şekilde kullanılır:
RuleFor(p => p.DateOfBirth)
.Must(BeAValidAge)
.WithMessage("Invalid {PropertyName}");RuleFor(p => p.DateOfBirth)
.Must(BeAValidAge)
.WithMessage("Invalid {PropertyName}");Bu, tarihler veya son kullanma pencereleri gibi geçici verileri doğrulamak için iyi bir desendir.
Son Düşünceler ve Tavsiyeler
Tim, FluentValidation'un önemli avantajlarını özetleyerek sonlandırıyor:
Merkezi doğrulama mantığı
Özel doğrulayıcılar oluşturmak kolaydır
Hem .NET 5 ve daha yeni hem de eski çalışma zamanları ile uyumlu
- Karmaşık modelleri, listeleri ve asenkron kuralları destekler
Hem hobi meraklıları hem de ticari projeler için idealdir
İzleyicileri, gelişmiş kullanım için, FluentValidation belgelerini keşfetmeye, iç içe kurallar, e-posta özelliği doğrulaması ve daha fazlasını içeren konular hakkında bilgi edinmeye teşvik ediyor.
Sonuç
FluentValidation, .NET geliştiricilerine güçlü tanımlı doğrulama kuralları oluşturmaları için yeniden kullanılabilir, ifade edilebilir ve sürdürülebilir araçlar sunar. .NET Core, .NET 8 ile geliştiriyor veya .NET Core 3.1 üzerinde eski sistemleri sürdürüyor olun, bu kütüphane veri doğrulamasını çok kolay hale getiriyor.
Şu özelliklerle:
Kuralları oluşturmak için akıcı arayüz
Özelleştirilmiş posta kodu doğrulama mantığı desteği
Visual Studio ile kolay entegrasyon
API testleri, WinForms ve ASP.NET ile uyumluluk
- Doğrulama hatalarının sağlam ele alınması
FluentValidation, .NET araç setinizde sahip olmanız gereken bir öğedir. Daha fazla ayrıntı için lütfen tam videoyu izleyin ve Tim'in C# üzerine daha fazla içgörü dolu videolarını takip etmek için Kanalına abone olun.
İpucu: FluentValidation kullanmaya yeni başladıysanız, public string Name, string Postcode gibi özellikler için kurallar oluşturarak kendi CustomerValidator'unuzu uygulamayı deneyin. Uygulamalı deneyim kazanmak için bir sahte API veya kullanıcı arayüzü formu ile test edin.

