W bazie danych mojej firmy (aplikacja .NET 3.5) widzę następujący wzór kodu:
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
}
Staram się owijać wokół głowy, dlaczego miałbyś to zrobić zamiast tego, że Foometoda po prostu bierze identyfikator i zwraca Bazobiekt, zamiast zwracać wartość, która nie jest używana, a faktycznym obiektem jest parametr referencyjny lub wyjściowy.
Czy jest jakaś ukryta zaleta tego stylu kodowania, którego mi brakuje?
bazjest nulli zwracany boolistotą falsesą nie równoważne. new BazObject()jest nigdy null, więc jeśli nie bazObjectzostanie zaktualizowany przed Exceptionwrzuceniem Foo, falseto kiedy zostanie zwrócony baz, nigdy nie będzie null. To pomaga ogromnie jeśli specyfikacja dla Foobyły dostępne. W rzeczywistości jest to prawdopodobnie najpoważniejszy problem związany z tym kodem.