2016-08-19 4 views
0

try-catch-finally状況では、メソッドの呼び出しに関してはfinallyを処理する適切な方法は何ですか?「finally」を使用してデザインでメソッドを呼び出す

私が尋ねる理由は、DB呼び出しを行うサービス実装クラスがすべてのメソッドでfinally句を持つ可能性があるためです。

DRYアプローチを使用する場合は、finally句が同じコードを繰り返したままにしないようにしてください。例えば

try { 
     // DB call 
    } catch (DAOException e) { 
     // Error messages etc 
    } finally { 
     // entityMangerProvider is a field 
     EntityManager entityManager = entityManagerProvider.get(); 
     EntityTransaction transaction = entityManager.getTransaction(); 
     if (entityManager.isOpen()) { 
      if (transaction.isActive()) { 
       transaction.rollback(); 
      } 
      entityManager.close(); 
     } 
    } 

finallyは、上記アウトを通して繰り返されます。それがこの

private void closeEntityManager() { 
    EntityManager entityManager = entityManagerProvider.get(); 
    EntityTransaction transaction = entityManager.getTransaction(); 
    if (entityManager.isOpen()) { 
     if (transaction.isActive()) { 
      transaction.rollback(); 
     } 
     entityManager.close(); 
    } 
} 

ような何かをして、このアプローチへの欠点があります。この

try { 
     // DB call 
    } catch (DAOException e) { 
     // Error messages etc 
    } finally { 
     closeEntityManager(); 
    } 

を行うには、適切ですか? finally節を何度も何度も繰り返さないようにする良い方法はありますか?

プロジェクトは重要な場合はJava 7を使用しています。

+4

メソッドは、コードの重複を減らすためのものです。これはそれを行う良い例のようです。 –

+0

そのようにするには欠点はありますか?最後にメソッドを呼び出すと、そのメソッドが正しく実行されないことがありますか? – wiredniko

+0

いいえ、私はここであなたのソリューションに何か問題はありません。 –

答えて

3

いいえ、新しい方法のアプローチには制限はありません。メソッドは、コード内で柔軟性を提供するために作成することができます。

あなたはentityManagerProvider(これは他の場所から呼び出した場合にパラメータとしてこの新しいメソッドに渡すことができます)を持ち、残りのすべての新しく作成されたオブジェクトと参照を使用しています。新しいメソッドを定義し、最終的にどこでも使用することができます{...}。

関連する問題