Genelde bir OOP sorunu olduğunu düşünmeme rağmen, özellikle Java'da sık sık bu soruna rastlarım. Yani: bir istisna yaratmak, bir tasarım problemini ortaya çıkarır.
Bir String namealan ve bir String surnamealan olan bir sınıfım olduğunu varsayalım .
Daha sonra bu alanları bir tür belgede görüntülemek üzere bir kişinin tam adını oluşturmak için kullanır, bir fatura söyleyin.
public void String name;
public void String surname;
public String getCompleteName() {return name + " " + surname;}
public void displayCompleteNameOnInvoice() {
String completeName = getCompleteName();
//do something with it....
}
Şimdi displayCompleteNameOnInvoiceismim atanmadan önce çağrılırsa , sınıfımın davranışını bir hata atarak güçlendirmek istiyorum . İyi bir fikir gibi görünüyor, değil mi?
İstisna yükseltme kodunu getCompleteNamemetoda ekleyebilirim . Ancak bu şekilde, sınıf kullanıcısı ile 'örtük' bir sözleşmeyi ihlal ediyorum; Genelde, alıcıların, değerleri belirlenmemişse istisnalar atması beklenmez. Tamam, bu standart bir alıcı değil, çünkü tek bir alanı geri getirmiyor, ancak kullanıcı bakış açısından bu ayrım düşünmek için çok ince olabilir.
Veya istisnayı içinden fırlatabilirim displayCompleteNameOnInvoice. Fakat bunu yapmak için doğrudan nameveya surnamealanları test etmeliyim ve böyle yapmak, onu temsil ettiğim soyutlamayı ihlal eder getCompleteName. Adın tamamını kontrol etmek ve oluşturmak bu yöntem sorumluluğudur. Kararı diğer verilere dayanarak, bazı durumlarda yeterli olduğuna bile karar verebilirdi surname.
Yani tek olasılık yönteminin semantik değiştirmek gibi görünüyor getCompleteNameiçin composeCompleteName, onunla bir daha 'etkin' davranış ve, istisna atan yeteneğini gösteriyor ki.
Bu daha iyi tasarım çözümü mü? Her zaman sadelik ve doğruluk arasındaki en iyi dengeyi arıyorum. Bu sorun için tasarım referansı var mı?
displayCompleteNameOnInvoiceeğer getCompleteNamegeri dönerse bir istisna atabilir null, değil mi?