IRONSOFTWAREHOME

C#'da FluentValidation - Güçlü Ancak Kolay Veri Doğrulama Aracı

C#'ta Fluent Validation - Güçlü ve Kolay Veri Doğrulama Aracı

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.

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>

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();

O, Person nesnesini doğrulamak için bir var doğrulayıcı kullanır:

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");

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)

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");

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
}

Bunu bir doğrulayıcıda şöyle kullanabilirsiniz:

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)"

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);
}

Şu şekilde kullanılır:

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.

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!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez