platziert habe, habe ich eine Frage bezüglich der Ausnahmebehandlung und des Ressourcenmanagements und ich frage mich, ob irgendjemand ihre Meinung teilen könnte. Ich muss eine Reihe von Aktionen durchführen: App-Einstellungen lesen, die Umgebung einrichten, das Zeug machen und dann schließlich aufräumen. Bei der Bereinigung muss die Umgebung abgerissen werden. Dies sollte jedoch nur dann geschehen, wenn sie erfolgreich eingerichtet wurde.Reinigen Sie, bevor Sie Unordnung machen? Nachdem ich den Cleanup-Code innerhalb des Blocks
Hier ist mein erster (und lahm) Ansatz:
try {
readSettings();
setupEnvironment();
} catch (Exception ex) {
logStackTrace(ex);
displayError(ex);
closeCommThreads();
return;
}
try {
// do stuff
} catch (Exception ex) {
logStackTrace(ex);
displayError(ex);
} finally {
teardownEnvironment();
closeCommThreads();
}
Das ist ein bisschen hässlich sein schien, so für eine bessere Lösung, die ich beschlossen, zu suchen. Ich habe etwas Hintergrund lesen und ziemlich viele Artikel stimmen für größere try/catch
Blöcke und Verwendung (ein Wortspiel?) finally
für die Bereinigung. Also hier ist mein zweiter Versuch:
try {
readSettings();
setupEnvironment();
// do stuff
} catch (Exception ex) {
logStackTrace(ex);
displayError(ex);
} finally {
teardownEnvironment();
closeCommThreads();
}
Um diese Arbeit zu machen, hatte ich aus teardownEnvironment()
sequenzieller Kupplung zu entfernen, so dass sie jederzeit aufgerufen werden können - vor oder nach setupEnvironment()
(für die Redaktion: eine Möglichkeit, es besser setzen). Ist das der richtige Ansatz? Ich fühle mich ein bisschen komisch, vor dem Aufbau abzubauen.
Edit:
Nur um es etwas deutlicher: Ich entfernte sequentielle Kopplung durch eine zusätzliche Prüfung innerhalb teardownEnvironment
einschließlich - so etwas wie if (!isSetup()) return;
.
Anstatt doppelte Fragen zu öffnen, können Sie den handlichen 'edit' Link unten verwenden;) –
Yeah, yeah - Ich habe das gemacht und dann Browser * back * benutzt und versehentlich ein zweites Mal gepostet:/Entschuldigung. Hey, zumindest hatte ich endlich die Chance, * delete * button zu benutzen;) – lukem00
ja, der delete-Button hat mich dazu gebracht, meine Antwort nicht mehr zu schreiben und stattdessen diesen Post zu finden. –