Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
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.
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.
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.
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.
Doğum tarihi gelecekte olmamalı veya 120 yaşından büyük olmamalıdır.
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.
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.
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
Inherits AbstractValidator(Of 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.
Tim, bir lambda ifadesi kullanarak bir kural yazar:
RuleFor(p => p.FirstName).NotEmpty();RuleFor(Function(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);Dim validator As New PersonValidator()
Dim results As ValidationResult = 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.
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(Function(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.
Tim, bir yöntemi kullanarak özel bir doğrulayıcı uygular:
private bool BeAValidName(string name)Private Function BeAValidName(name As String) As BooleanBu, 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 Function BeAValidPostcode(postcode As String) As Boolean
' Add custom logic here to specify a valid postcode format
End FunctionBunu bir doğrulayıcıda şöyle kullanabilirsiniz:
RuleFor(c => c.Postcode).Must(BeAValidPostcode)
.WithMessage("Please specify a valid postcode");RuleFor(Function(c) c.Postcode).Must(AddressOf 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.
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.
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.
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.
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 Function BeAValidAge(dob As DateTime) As Boolean
Dim currentYear = DateTime.Now.Year
Dim dobYear = dob.Year
Return dobYear <= currentYear AndAlso dobYear > (currentYear - 120)
End FunctionŞu şekilde kullanılır:
RuleFor(p => p.DateOfBirth)
.Must(BeAValidAge)
.WithMessage("Invalid {PropertyName}");RuleFor(Function(p) p.DateOfBirth) _
.Must(AddressOf BeAValidAge) _
.WithMessage("Invalid {PropertyName}")Bu, tarihler veya son kullanma pencereleri gibi geçici verileri doğrulamak için iyi bir desendir.
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.
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.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy