私はDAOクラスで一般的な例外をキャッチし、DaoExceptionにラップします。これを行う主な理由は、EBeanは保存に失敗した場合に別のランタイム例外をスローしているため、それらを上位レイヤに伝播したくないということです。上位レイヤーは、保存が成功したかどうかだけを知る必要があります。DAOレイヤーの一般的な例外をキャッチするのは悪い習慣ですか?
以下はコードスニペットです。
public void save(Object object) throws DaoException {
try {
Ebean.save(object);
} catch (Exception e) {
throw new DaoException("Error saving record", e);
}
}
これは一般的な例外がキャッチされるべきではないという一般的な考え方に反します。
しかし、これはこのシナリオで許容されるか、それでもなお悪い習慣ですか?
私の質問に追加することがさらにいくつかあります。 私の正確な要件は、
は私がトランザクションにして永続化する必要がある独立したオブジェクトで設定されているがあります。 (他のインスタンスが同時に同じオブジェクトに変更を加えるのを避けるためにトランザクションでこれを行う必要があります)
エラーが原因で1つのオブジェクトがパースに失敗する場合は、さらに他のオブジェクトを保持する必要があります。 (Czは独立しています)
私がサービスレイヤーで行っていることは、オブジェクトのセットをループしていることです。 1つのオブジェクトからDaoExceptionを受け取った場合は、エラー応答に追加してもループを続行します。しかし、それは取引を中断すべきではありません。 この要件を満たす良い方法はありますか?
保存関数が別の型を投げているのはなぜですか? –
https://stackoverflow.com/questions/21938/is-it-really-that-bad-to-catch-a-general-exception?rq=1の可能性のある複製 – scottb