アイキャッチ

設計・テスト・レビュー

例外クラスに何となくで名前つけるのやめようぜ

このページに書いてあること

既存のJavaコードで見かける、メソッド名に沿った例外と、例外を出すクラスで意味を補う方式を比較します。呼び出し側で対応を変えられるかに注目します。

例外クラス名の命名どうする問題

例外名は発生した場所の手掛かりにもなります。ただし、呼び出し側が変えたい対応を、その場所だけで判断できるかを確認します。次の2例は、既存コードを読むときの比較です。

前提

ユーザー登録と更新があり、データアクセスでエラーが起きる例です。図では操作の担当クラスを分けています。クラス分割の原則から例外名を一律に決める必要はありません。

メソッド名に依存した命名

DatabaseInsertException と DatabaseUpdateException なら、どの操作で失敗したかを型から判別できます。どちらにも同じ再試行・エラー応答を行う場合は、型を増やす代わりに操作名や原因をログでたどれるようにできます。

操作ごとに異なる例外名を付けたデータアクセス構成

クラス名に依存した命名

登録と更新が同じ DatabaseException を投げる場合、調査時はスタックトレースとcauseから起点を追えます。一方、呼び出し側が型だけで「重複登録には別の応答を返す」ことはできません。その分岐が必要なら、業務上成立しなかった条件を表す型やエラーコードを境界で持たせます。

登録と更新で共通のDatabaseExceptionを使う構成

既存コードを直すときは、まずcatchや例外ハンドラを読み、利用者への応答やリトライが変わる箇所を探します。

関連記事Javaの例外クラス名はどう付ける?業務例外とシステム例外の命名ルール 注文不存在・取消済み・外部通信の失敗を題材に、呼び出し側で対応を分けるときの例外名を確認できます。 記事を読む

-設計・テスト・レビュー
-,