Altbilgi içeriğine atla
Iron Academy Logo
C# Araçları & Verimlilik

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.

Hero Worlddot related to C#'da FluentValidation - Güçlü Ancak Kolay Veri Doğrulama Aracı
Hero Affiliate related to C#'da FluentValidation - Güçlü Ancak Kolay Veri Doğrulama Aracı

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara