Bu konuda daha deneyimli bir geliştirici ile biraz anlaşmazlık yaşıyorum ve başkalarının bu konuda ne düşündüğünü merak ediyorum; ortamımız Java, EJB 3, hizmetler vb.
Yazdığım kod, bir şeyler almak ve bir şeyler yaratmak için bir servisi çağırıyor. Karşılaştığım sorun, anlamlı olmayan boş gösterici istisnalarım oldu. Örneğin, hizmetten bir nesne oluşturmasını istediğimde, null geri alıyorum; Bilinen geçerli bir kimliği olan bir nesneyi aramaya çalıştığımda null değerini geri alıyorum. Kodumda neyin yanlış olduğunu anlamaya çalışırken biraz zaman geçirdim; daha az tecrübeli olduğum için genellikle yanlış bir şey yaptığımı varsayıyorum, ama bu sıfır getirinin güvenlik olduğu ortaya çıkıyor. Hizmetimi kullanan kullanıcı sorumlusu hedef hizmet için doğru izinlere sahip değilse, yalnızca null değerini döndürür. Buradaki diğer hizmetlerin çoğu da çok iyi belgelenmemiş, bu yüzden görünüşe göre bu sadece bilmeniz gereken bir şey.
Bu, hizmetle etkileşim kuran bir geliştirici yazma kodu olarak oldukça kafa karıştırıcıdır. Hizmetin, kullanıcının bu şeyi yüklemek veya bu şeyi oluşturmak için uygun izinlere sahip olmadığını söyleyecek bir istisna olması benim için çok daha mantıklı olacaktır; O zaman hemen servisimin neden beklendiği gibi çalışmadığını anlayacağım.
Hizmeti yazan daha deneyimli geliştirici, veri istemenin bir hata koşulu olmadığını ve istisnaların, kullanıcının verilere erişimi olmadığında değil, yalnızca bir hata durumunda atılması gerektiğini savundu. Bu veriler genellikle bir GUI'de aranır ve doğru izinleri olmayan kullanıcılar için bu şeyler yalnızca "mevcut değildir". Kısacası: sormak yanlış değil, bu yüzden istisna yok. Yöntemleri boş döndür çünkü bu kullanıcılara bu şeyler "yok". Oluşturma yöntemleri, kullanıcının bu şeyi oluşturmasına izin verilmediğinde null değerini döndürür.
Bu normal ve / veya iyi bir uygulama mı? İstisnaları kullanmayı tercih ediyorum çünkü neler olduğunu bilmek daha kolay. Bu nedenle, örneğin, geçersiz kimliğe sahip bir nesneyi null döndürmektense sorduğunuzda bir NotFoundException oluşturmayı da tercih ederim.