Şirketimin kod tabanında (.NET 3.5 uygulaması) aşağıdaki kod desenini her yerde görüyorum:
bool Foo(int barID, out Baz bazObject) {
try {
// do stuff
bazObject = someResponseObject;
return true;
}
catch (Exception ex) {
// log error
return false;
}
}
// calling code
BazObject baz = new BazObject();
fooObject.Foo(barID, out baz);
if (baz != null) {
// do stuff with baz
}
Neden Fooyöntem yerine sadece ID almak ve Bazkullanılmayan bir değer döndürme ve gerçek nesne bir ref veya output parametresi olması yerine bir nesne döndürmek yerine bunu yapmak etrafında kafamı sarmaya çalışıyorum .
Eksik olduğum bu kodlama stilinin gizli bir yararı var mı?
bazvarlık nullve döndürülen boolvarlık falsevardır değil eşdeğeri. new BazObject()asla atılmaz null, bu yüzden atılmadan bazObjectönce güncellenmedikçe , ne zaman iade edilir asla . Eğer muazzam yardımcı olacağını Spec için kullanılabilir. Aslında, bu belki de bu kodun sergilediği en ciddi sorundur. ExceptionFoofalsebaznullFoo