30行の例外コードブロックの同じセットが繰り返され、コード重複レポートに表示される、多数のサービスクラスとDAOクラスがあります。
私が考えることができるアプローチは
共通の例外コードブロックを共通のメソッドに抽出して呼び出す
一発での方法
メソッドを再編成して、例外コードのセットが1つしかないサービスまたはDAOへの入り口と出口が常に1つあるようにします。
このシナリオに取り組むより良い方法はありますか?
例外処理をメソッドに抽出します。
public interface Action {
public void execute() throws ...;
}
public static void handleErrors(Action action) throws ... {
try {
// setup .....
action.execute();
} catch (...) {
// ...
} finally {
// cleanup ...
}
}
次に、次のように呼び出します。
handleErrors(new Action(){ public void execute() throws ... {
// ...
}});
構文は醜いですが、それでもエラー処理を何十回も複製するよりもはるかに優れています。数行以上を複製しているときはいつでも、停止して、その複製を回避する方法を理解する必要があります。 Javaでは、これは多くの場合、インターフェイスと匿名クラスを使用して、1つのコードブロックを渡し、いくつかの一般的な制御ロジック内で実行することを意味します。同じ手法を再利用して、ループコードの重複を排除できます。
明示的な例外ハンドラーの作成を検討してください。
これは最初の提案と同様のアプローチですが、代わりにメソッドをオブジェクト内に配置します。また、専用の割り込みハンドラーを備えた古いモノリシックアプリケーションにも似ています。どちらの方法でも、ポイントは同じです。処理コードを1回記述してから、必要に応じて呼び出します。