web-dev-qa-db-ja.com

重複する例外ブロックコードを削除する方法

30行の例外コードブロックの同じセットが繰り返され、コード重複レポートに表示される、多数のサービスクラスとDAOクラスがあります。

私が考えることができるアプローチは

  • 共通の例外コードブロックを共通のメソッドに抽出して呼び出す
    一発での方法

    メソッドを再編成して、例外コードのセットが1つしかないサービスまたはDAOへの入り口と出口が常に1つあるようにします。

このシナリオに取り組むより良い方法はありますか?

7
dosakiller

例外処理をメソッドに抽出します。

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つのコードブロックを渡し、いくつかの一般的な制御ロジック内で実行することを意味します。同じ手法を再利用して、ループコードの重複を排除できます。

5
kevin cline

明示的な例外ハンドラーの作成を検討してください。

これは最初の提案と同様のアプローチですが、代わりにメソッドをオブジェクト内に配置します。また、専用の割り込みハンドラーを備えた古いモノリシックアプリケーションにも似ています。どちらの方法でも、ポイントは同じです。処理コードを1回記述してから、必要に応じて呼び出します。

0
user53019