2016-04-07 14 views
0

現在、私のサインアップは次のようになります。最初のために可能な(チェックされていない)すべての例外を適切に処理していますか?

public void signup(User newUser) throws Exception { 
    log.info("Sign up: " + newUser.getEmail()); 
    if (restService.emailAlreadyExists(newUser.getEmail())) { 
     throw new Exception("Email already in use."); 
    } 
    List<Role> roles = new ArrayList<Role>(); 
    roles = roleRepository.findAllOrderedByName(); 
    roles.add(roleRepository.findByName("user")); 
    newUser.setRoles(roles); 
    newUser.setPassword(restService.getHashedValue(newUser.getPassword())); 
    try { 
     em.persist(newUser); 
    } catch (Exception e) { 
     throw new Exception("Just noobs use apps with less bugs. Try again. Now!"); 
    } 
    log.info(newUser.toString()); 
    userEvent.fire(newUser); 
} 

私は、ユーザーのために(FacesMessageになります)2つのメッセージにだけ興味があります。ユーザーの他の隠れたメッセージを防ぐために、私はさらにtryブロックを役割まで拡張する必要があります。

これは悪い習慣だと思います。また、一般的なExceptionのにおいを使用して、彼らは言う。しかし:

  • IllegalStateException
  • IllegalArgumentException
  • EntityExistsException
  • TransactionRequiredException
  • ObserverException

でも8については話していない:私は、このコードの小片でException秒を記録し、次の検出(!)Exception s方法のgetSingleResult()javax.persistence.TypedQueryである。

この例ではすべてExceptionを実際に処理する必要がありますか、またはいくつかをスキップしてもかまいません(および/または上記のような一般的なExceptionを使用することもできます)。

+2

あなた自身に尋ねるべきことは、あなたがそれらをすべて扱うべきかどうかです。多くのUncheckedExceptionsは、システムが回復できないエラーを表します。だから、あなたはUIをブロックせずにユーザを悩ますことなく、これをどのように扱うのだろうか?それらのいくつかは処理することができますが、ユーザーやシステムが問題を解決するために何もできない場合は、どうしますか? – Stultuske

+0

また、バックエンドを書いてみましょう。 UIが例外でどのように対応するのか知っていますか?時々、例外を伝播することは、あなたが何をすべきかを知っていると仮定することよりも優れています。 – Stultuske

+0

http://stackoverflow.com/questions/2416316/why-is-the-catchexception-almost-always-a-bad-idea – Raedwald

答えて

0

ベストプラクティスは、すべての例外を個別にキャッチし、できるだけカスタムログメッセージを作成することです。障害のある状況を理解し、それに従って行動する方が簡単です。

典型的なビジネスアプリケーションの現実は、あなたの例外をグループ化しようとします(例えば、あなたのメソッド入力によって引き起こされる可能性のある例外すべてをグループ化し、dbによってスローされるすべての例外をグループ化してください)。悪名高いcatch (Exception e)か、一般的なメッセージで一般的な例外を再開してください。そうすれば、人々は象のように成長しているログについてあなたに電話し始めるでしょう。

+3

私はベストプラクティスを可能な限り例外をスローすると考えました。すべての可能な例外をキャッチすることは無駄な仕事です。IMHO – Bohemian

+0

私の場合、例外はありません(メッセージのためにとにかく投げたい2つのものの横にすべてチェックが外されます)。そしてそれは重要ではない、それは一般的な例外である、そうではない? – Martin

関連する問題