Merhaba,
Yazılım geliştirirken en çok karşılaştığımız konulardan biri de doğru veri validasyonu yapmaktır. Kullanıcılardan gelen veriler her zaman temiz, düzgün ve beklendiği gibi olmayabiliyor. Bu yüzden hem API tarafında hem de arayüz tarafında verileri sıkı bir şekilde kontrol etmek şart. Özellikle string alanlarda yapılan küçük hatalar, zamanla sistemde büyük problemlere yol açabiliyor.
Bugün sabah saatlerinde API tarafında bu konuyla ilgili ilginç bir validasyon sorunu yaşadım.
Tüm alanlar için FluentValidation kullanıyor, NotEmpty() ve NotNull() gibi kontrollerle güvence altına alıyordum. Ama bir kullanıcıdan şöyle bir istek geldi:
{
"ExampleProperty": " A",
"ExampleProperty": " A",
"ExampleProperty": " A"
}
Atılan bu isteği sistem kabul etti.

🎯 Sorun Neydi?
FluentValidation NotEmpty() kuralı, sadece tamamen boş ("") string’leri yakalar.
Eğer kullanıcı alanın başına veya sonuna boşluk eklerse, bu alan aslında boş değil gibi görünür!
Yani " A" → NotEmpty kabul eder çünkü teknik olarak boş değil.
🔎 Gerçek Boşluk Kontrolü Nasıl Olmalı?
Veri giriş alanlarında özellikle kullanıcıdan gelen metinlerde, sadece boşluk bırakmak ya da karakterin önüne boşluklar koymak, hem kötü kullanıcı deneyimi hem de veri kalitesini ciddi şekilde etkiler.
İşte bu yüzden klasik NotEmpty() kontrolü yeterli değildir.
Bu durumu çözmek için ekstra bir koşul eklenmeli:
Alan, kendi trim’lenmiş (kırpılmış) haline eşit olmalı.
.Must(x => x == x.Trim())
Bu ifade şunu yapar: Eğer kullanıcının girdiği değerin başında ya da sonunda boşluk varsa, veri geçersiz sayılır.
🧪 Örneklerle Anlatmak Gerekirse
string veri = " A";
bool sonuc = veri == veri.Trim(); // false
Trim işlemi " A" ifadesini "A"'ye çevirir. Bu durumda eşitlik sağlanmaz ve validasyon başarısız olur.
Ama şu örnekte:
string veri = "Sinan Tosun";
bool sonuc = veri == veri.Trim(); // true
Çünkü burada başta ya da sonda fazladan boşluk yoktur. Dolayısıyla veri geçerli sayılır.
🛡️ Neden Bu Kadar Önemli?
Bu küçük gibi görünen detay, zamanla veri tabanınızda yüzlerce "bozuk" veri birikmesine neden olabilir.
Aramalarda uyumsuzluklar yaşanabilir, görüntüleme sorunları oluşabilir, hatta bazı kullanıcılar sistemi kötüye bile kullanabilir.
✅ Önerilen Yaklaşım
-
Sadece NotEmpty() kullanmakla yetinilmemeli.
-
Girdi verilerinin Trim() uygulanmış haliyle karşılaştırmasını yapılamalı.
-
İsterseniz önceden Trim() işlemini otomatik olarak uygulayıp sonradan NotEmpty() kontrolü de yapabilirsiniz.
Bu durumda kullanıcı arayüzü tarafında da aynı mantığı kullanmak faydalı olur.
📌 Sonuç
Bu deneyim bana bir kez daha gösterdi ki, validasyon yalnızca "boş mu, dolu mu?" gibi yüzeysel kontrollerle sınırlı olmamalı. Geliştirdiğimiz sistemlerde, kullanıcıların niyetini doğru anlamak, veri kalitesini yüksek tutmak ve uzun vadede sürdürülebilir bir yapı kurmak istiyorsak, daha derinlemesine ve anlamlı doğrulama mekanizmaları kurmalıyız.
Basit gibi görünen bir Trim() işlemi bile;
- hatalı veri girişlerini önleyebilir,
- sistem tutarlılığını koruyabilir,
- kullanıcı deneyimini doğrudan etkileyebilir.
Ancak bu tür kontrolleri yalnızca uygulamak değil, doğru yerde ve doğru şekilde uygulamak da bir o kadar önemlidir.
Sonuç olarak; yazılımda küçük detaylar büyük farklar yaratır.
Bir satır kodla bile veri bütünlüğü sağlanabilir, kullanıcıların güveni kazanılabilir.
👉 Siz de validasyon kurallarınızı gözden geçirin.
Küçük bir ihmal, büyük veri sorunlarına yol açmasın.
Görüşmek üzere,