Geçen hafta, uygulamamızın hizmet katmanındaki boş değerleri ele alma konusunda hararetli bir tartışma yaptık. Soru .NET bağlamında, ancak Java ve diğer birçok teknolojide aynı olacak.
Soru şuydu: boştakileri her zaman kontrol etmeli ve ne olursa olsun kodunuzun çalışmasını sağlamalı mı ya da boş bir beklenmedik şekilde alındığında bir istisna oluşsun mu?
Bir tarafta, beklemeyeceğiniz null (yani onu işlemek için kullanıcı arayüzü yok) kontrol, bence, boş yakalamak bir deneme bloğu yazmak gibi. Sadece bir hata gizliyorsun. Hata, kodda bir şeylerin değişmiş olması olabilir ve null şimdi beklenen bir değerdir veya başka bir hata vardır ve yanlış kimlik yönteme iletilir.
Öte yandan, boş değerlerin kontrolü genel olarak iyi bir alışkanlık olabilir. Dahası, eğer bir kontrol varsa uygulama çalışmaya devam edebilir, fonksiyonelliğin sadece küçük bir kısmı etkilenmez. Ardından müşteri "X sayfasını açamaz" gibi çok daha ciddi bir hata yerine "yorumu silemez" gibi küçük bir hatayı bildirebilir.
Hangi uygulamaları takip ediyorsun ve bu yaklaşımlardan herhangi birine karşı ya da karşı olan argümanların neler?
Güncelleme:
Özel durumumuz hakkında biraz ayrıntı eklemek istiyorum. Veritabanından bazı nesneler alıyorduk ve üzerlerinde bazı işlemler yaptık (diyelim ki, bir koleksiyon oluşturalım). Kodu yazan geliştirici, nesnenin boş olacağını tahmin etmiyordu, bu nedenle herhangi bir kontrol içermiyordu ve sayfa yüklendiğinde bir hata oluştu ve tüm sayfa yüklenmedi.
Açıkçası, bu durumda bir çek olmalıydı. Sonra, işlenen her nesnenin, eksik olması beklenmese bile kontrol edilmesinin gerekip gerekmediği ve nihai işlemenin sessizce iptal edilip edilmemesi gerektiği üzerine bir tartışma yaptık.
Varsayımsal yarar, sayfanın çalışmaya devam edeceği olacaktır. Stack Exchange'de farklı gruplar halinde (kullanıcılar, yorumlar, sorular) bir arama sonucu düşünün. Bu yöntem null değerini kontrol edebilir ve (bir hata nedeniyle null olan) kullanıcıların işlemlerini iptal edebilir, ancak "yorumlar" ve "sorular" bölümlerini döndürür. Sayfa, "kullanıcılar" bölümünün (bir hata) eksik olması dışında çalışmaya devam eder. Erken başarısız olup tüm sayfayı kırmalı mıyız veya çalışmaya devam edip birisinin "kullanıcılar" bölümünün eksik olduğunu fark etmesini beklemeli miyiz?
assert(foo != null, "foo is web control within the repeater, there's no reason to expect it to be null, etc, etc...");