Je vois le modèle de code suivant partout dans la base de code de mon entreprise (application .NET 3.5):
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
}
J'essaie de comprendre pourquoi vous feriez cela au lieu d'avoir la Foométhode simplement prendre l'ID et renvoyer un Bazobjet, au lieu de renvoyer une valeur qui n'est pas utilisée et que l'objet réel soit un paramètre de référence ou de sortie.
Y a-t-il un avantage caché de ce style de codage qui me manque?
bazêtre nullet l' boolêtre retourné ne falsesont pas équivalents. new BazObject()n'est jamais null, donc à moins qu'il ne bazObjectsoit mis à jour avant que le Exceptionsoit jeté Foo, quand falseest retourné bazne le sera jamais null. Cela aiderait énormément si les spécifications pour Fooétaient disponibles. En fait, c'est peut-être le problème le plus grave présenté par ce code.