11

アプリケーションの各層(つまり、など)に例外を設けることをお勧めPresentationExceptionしますServiceExceptionPersistenceExceptionしかし、サービスレイヤーが追加の操作なしでDAOメソッド(永続レイヤーのメソッド)を直接呼び出すとどうなりますか。

このような:

public class MyService {
   private IPersonDAO dao = new PersonDAO();

   public void deletePerson(int id) { 
      dao.deletePerson(id);
   }

}

このDAOメソッドの呼び出しをtry-catchブロックでラップし、可能な例外を次のように再スローする必要がありServiceExceptionますか?各DAOメソッドはスローする必要がありPersistenceExceptionますか?

4

3 に答える 3

7

Daoの例外はサービスレイヤーとは無関係であり、サービスレイヤーはdaoレイヤーの例外とは何の関係もありません。正しいアプローチは、dao例外をキャッチし、新しいカスタム例外をサービスレイヤーに再スローすることです。

例外をデバッグする必要があり、正確な原因が必要な場合は、getCause( )メソッドとgetSuppressed()メソッドを使用できます。

このDAOメソッドの呼び出しをtry-catchブロックでラップし、可能な例外をServiceExceptionとして再スローする必要がありますか?各DAOメソッドはPersistenceExceptionのみをスローする必要がありますか?

--->はいラップします。daoレイヤーから他の例外をスローできます。以下の例を参照してください。

public class MyDao {       

   public Entity getMyEntity(int id) throws ObjectNotFoundException, PersistenceException {
      try {
         // code to get Entity
         // if entity not found then 
         throw new ObjectNotFoundException("Entity with id : " + id + "Not found.");
      } catch(Exception e) { // you can catch the generic exception like HibernateException for hibernate
         throw new PersistenceException("error message", e);
      }
   }

}
于 2013-02-06T06:32:24.837 に答える
2

はい。おっしゃるように、レイヤーには例外を設けることをお勧めします。DBではなくサービスの観点から問題が何であるかを知ることができるからです。

于 2013-02-06T06:08:56.767 に答える
0

はい。サービスレイヤークライアントはデータベースレイヤーも処理する必要があるため、どのような場合でもこれらの例外をラップする必要があります。これは物事を過度に複雑にするでしょう。サービス層で実行する必要のある作業は、サービス層の上の層でデータベースの例外を処理するために必要な作業と比較すると、意味がないことに注意してください。

于 2013-02-06T07:43:49.987 に答える