例外処理とリソース管理について質問があります。意見を共有できる人がいるかどうか疑問に思っていました。一連のアクションを実行する必要があります。アプリの設定を読み取り、環境をセットアップし、作業を行い、最終的にクリーンアップします。クリーンアップには環境の破棄が含まれますが、これは、最初に正常にセットアップされた場合にのみ発生するはずです。
これが私の最初の(そして不自由な)アプローチです:
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();
}
それは少し醜いように思えたので、より良い解決策を探すことにしました。私はいくつかのバックグラウンド リーディングを行い、非常に多くの記事がより大きなブロックに投票し、クリーンアップにtry/catch
(しゃれ?) を使用していました。finally
だからここに私の2回目の試みがあります:
try {
readSettings();
setupEnvironment();
// do stuff
} catch (Exception ex) {
logStackTrace(ex);
displayError(ex);
} finally {
teardownEnvironment();
closeCommThreads();
}
これを機能させるには、シーケンシャル カップリングを削除して、teardownEnvironment()
前後にいつでも呼び出すことができるようにする必要がありましたsetupEnvironment()
(編集者にとっては、より良い方法はありますか?)。これは正しいアプローチですか?セットアップする前に解体するのは少し奇妙に感じます。
編集:
もう少し明確にするために、内部に追加のチェックを含めることにより、順次結合を削除しましたteardownEnvironment
- if (!isSetup()) return;
.