Ich sehe das folgende Codemuster überall in der Codebasis meines Unternehmens (.NET 3.5-Anwendung):
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
}
Ich versuche, mich darum zu Foo
kümmern, warum Sie dies tun würden, anstatt die Methode einfach die ID nehmen und ein Baz
Objekt zurückgeben zu lassen, anstatt einen Wert zurückzugeben, der nicht verwendet wird, und das tatsächliche Objekt als Referenz- oder Ausgabeparameter zu haben.
Gibt es einen versteckten Vorteil dieses Codierungsstils, den ich vermisse?
baz
sein null
und das zurückgegebene bool
Wesen false
ist nicht gleichwertig. new BazObject()
ist nie null
, es sei denn , bazObject
aktualisiert wird , bevor die Exception
in geworfen wird Foo
, wenn false
zurückgegeben wird , baz
wird es nie sein null
. Es würde enorm helfen, wenn die Spezifikation für Foo
verfügbar wäre. In der Tat ist dies vielleicht das schwerwiegendste Problem, das dieser Code aufweist.