ASP.NET Core MVC ile Fluent Validation Kullanımı

Bu makalemizde sizlerle birlikte ASP.NET Core MVC ile birlikte Fluent Validation kullanımını inceleyeceğiz.

Fluent Validation Nedir?

Bir uygulama geliştirirken sistemin çok daha düzgün ve kararlı çalışmasını sağlayacak bir çok etken vardır bunlardan belkide en önemlisi validasyon (doğrulama) işlemidir.Daha küçük projeler işlemleri için kendi yazdığımız basit doğrulama kodlarını kullanabiliyorken proje büyüdükçe bu basit doğrulama kodları içinden çıkılamaz bir hal alıyor.Gerek okunması, kuralların esnekliği,yönetilebilirliği yüzünden çok daha büyük bir yapıya ihtiyaç duyuyoruz.Fluent Validation bu ihtiyaçlarımızı karşılayan açık kaynaklı üçüncü parti kütüphanelerinden biridir.

Fluent Validation Kurulumu

Fluent Validation kütüphanesi açık kaynaklıdır.Kaynak kodlarını incelemek isterseniz GitHub üzerinden erişebilirsiniz.ASP.NET Core MVC projemize dahil etmek için aşağıda bulunan Nuget komutunu kullanabilirsiniz.

PM> Install-Package FluentValidation.AspNetCore

Kurulum işlemi tamamlandıktan sonra gelin ilk validasyon kurulamızı tanımlayalım.

İlk Validator

Fluent Validation genellikle sınıf bazlı uygulanır.Yani her sınıf için farklı Validatorler uygulanır.Personel isimli bir sınıfımız olduğunu varsayarsak bunun için PersonelValidator adında bir sınıf daha yazarız ve içerisine ihtiyacımız olan kuralları belirtiriz.Gelin basit bir örnekle kullanımını anlayalım.İlk olarak Personel isimli bir sınıf oluşturuyoruz.

public class Personel
{

    public string Adi { get;set; } public string Soyadi { get;set; } }

Yukarıda bulunan Personel sınıfı için Fluent Validation kütüphanesi içerisinde bulunan AbstactValidator’den miras alarak PersonelValidator adında bir sınıf daha oluşturuyoruz.

public class PersoneValidator : AbstractValidator<Personel>
{
    public PersonelValidator()
    {
          RuleFor(p => p.Adi).NotEmpty().MinimumLength(10);
          RuleFor(p=> p.Soyadi).NotEmpty().MinimumLength(20);
    }
}

Yukarıda bulunan bu basit örnekte görüldüğü üzere validasyon kurallarının tanımlanabilmesi için oluşturuduğumuz sınıfa ait contructor içerisinde çalışmamız gerekir.RuleFor() metodu çağırılarak Expression ile hangi property için işlem yapmak istiyorsak belirtilir.Yukarıda oluşturmuş olduğumuz kural bizlere Personel sınıfı içerisinde yer alan “Adi” isimli property’sinin boş geçilemiyeceğini ve en az on karakter uzunluğunda olması gerektiğini söylüyor.Aynı şekilde “Soyadi” property’sinin boş geçilemeyeceğini ve en az yirmi karakter uzunluğunda olması gerektiğini gösteriyor.Bunun yani sıra bir çok kontrol, doğrulama sağlamamıza oğlanak sağlıyor.Örnek vermek gerekirse girilen değer E-Mail adresimi girilen rakam sıfırdan büyük mü veya herhangi bir sayı aralığı kontrolü gibi.Bu makalede genel kullanımdan ve kurulumundan bahsettiğim için çok fazla detayına inmek istemiyorum.En sade basit kullanım şekli ile daha anlaşılır olabileceğini düşünüyorum.Eğer geriye herhangi bir hata mesajı döndürmek istiyorsanız kullanım şekli aşağıdaki gibidir.

public class PersoneValidator : AbstractValidator<Personel>
{
    public PersonelValidator()
    {
          RuleFor(p =>p.Adi).NotEmpty().WithMessage("Adi alanı boş geçilemez.").MinimumLength(10);
          RuleFor(p =>p.Soyadi).NotEmpty().MinimumLength(20).WithMessage("Soyadi alanı minumum 20 karakter uzunluğunda olmalıdır.");
    }
}

Yukarıda görüldüğü üzere WithMessage() methodu ile birlikte kullanılır.Fluent Validation kütüphanesini ASP.NET Core MVC kullanımı için Startup.cs içerisinde bazı tanımlamalar yapmanız gerekmetedir aksi halde hata ile karşılaşacaksınız.Startup.cs içerisinde bulunan ConfigureServices içerisine Fluent Validation ve IValidator tanımlamalarının yapılması gerekmektedir.

public void ConfigureServices(IServiceCollection services)
{
     services.AddTransient<IValidator<Personel>, PersonelValidator>();
     services.AddControllersWithViews().AddFluentValidation();
}

Bu tanımları Startup.cs içerisine ekledikten sonra herhangi bir sorun yaşamadan Personel sınıfı için yazmış olduğunuz kurallar geçerli olacaktır.

Bir sonraki makalede görüşmek üzere...

İlginizi Çekebilir

Yorum Yap