Attribute-Based Validation: Kod Tekrarını Azaltıyor mu, Yoksa Başka Sorun mu Yaratıyor?

Anket

Projelerinizde attribute-based validation kullanıyor musunuz?

0 oy

Attribute-based validation (öznitelik tabanlı doğrulama) C# ve diğer dillerde popüler bir yaklaşım. Bir sınıfın özelliklerine [Required], [StringLength], [Range] gibi öznitelikler ekleyip, çatı (framework) otomatik olarak kuralları uyguluyor. Teoride harika: tek bir yerde kuralı tanımla, her yerde kullan. Pratik hayatta ise işler karışıyor.

Gerçek durum şu: Attribute-based validation kod tekrarını sadece belirli senaryolarda azaltıyor. Basit, tek katmanlı doğrulamada (örneğin web formu alıp hemen veritabanına kaydetme) kesinlikle işe yarar. Bir User sınıfına [EmailAddress] ekleyip, controller'da otomatik doğrulama aldığında, evet, tekrar azalıyor.

Ama gerçek uygulamalar böyle değil. İş kuralları katmanlaşıyor: API girişinde bir doğrulama, iş mantığında başka bir kontrol, veritabanı işleminden sonra başka bir kural. Bir e-posta adresi sadece format olarak geçerli değil, sistemde daha önce kayıtlı olmaması da gerekebilir. Bunu öznitelikle yazamızsın. Sonunda yine custom validator yazıyorsun, yine kod yazıyorsun.

Kodu Tekrar Yazıyorsun Ama Başka Yerde: Attribute-based doğrulama genellikle presentation katmanında (ASP.NET ModelState, Blazor) çalışır. İş mantığı katmanında aynı kuralları tekrar yazmak gerekir. Bir kullanıcıyı API'den de, background job'dan da, command line'dan da oluşturmak istersen, her yerde doğrulama kodu yazıyorsun. Öznitelikler sadece bir yerde işe yaramış oluyor.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Debugging Sıkıntısı: Doğrulama kuralı bir öznitelik içinde gizliyse, sorun çıktığında nereden geldiğini anlamak zor. Stack trace'de bir reflection hatası görüyorsün, kuralın kendisini değil. Custom doğrulama kodu açık ve takip edilebilir.

Benim Görüşüm: Attribute-based validation basit, standart kurallar için iyi. Bir string alanı boş olamaz, e-posta formatı doğru olmalı, bunlar için kullan. Ama şirket iş kurallarını, karmaşık koşullu doğrulamaları öznitelikle çözmek istiyorsan, sonunda hem öznitelik hem custom kod yazıyorsun. Tekrar azalmıyor, sadece dağılıyor.

Daha iyi yaklaşım: Validation layer'ı (örneğin FluentValidation) kullan. Kuralları tek bir yerde, açık şekilde tanımla; presentation, iş mantığı, background job, hepsi aynı validator'ı çağırsın. Tekrar gerçekten azalır.

Attribute-based validation bir kısayol gibi görünüyor, ama çoğu zaman sadece sorunu başka bir yere taşıyor.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz