例外処理の方針

Try~Catchを使うことで例外を補足し、その後の処理を書くことができると多くの書籍に載っているが、システム全体としてどのように例外を処理するかという方針には、あまり触れられていないように思う。筆者はできるだけ例外処理を業務ロジック中に書かないようにしたいので、ビジネス系アプリケーションなら次のような方針にしている。

  1. 例外は基本的にシステムのエントリポイント(アプリケーションを起動するところ)で捕捉し、例外が発生したらそれ以降の処理は中断して画面にメッセージを表示する
  2. 例外が発生してもリトライ、スキップ、修正など特別な処理を行う場合は、例外が発生する可能性がある箇所にTry~Catch句を書き、その例外が発生した時の処理をCatch句の中に書く。

たとえば、画面を伴う業務システムが複数のファイルにアクセスするケースを例にする。メニュー画面クラスが起動クラスであるとすると、このクラスの中にすべての例外を補足するTry~Catch句を書く。このCatch句の中でメッセージボックスを表示するロジックを書く。これによって、メニュー画面クラス、業務画面クラスA、業務ロジッククラスBではTry~Catch句を書く必要がなくなる。そして、ファイルの読み取りに失敗することが致命的なエラーではなく、読み飛ばすことが仕様であるとすると、ファイル入出力クラスDで発生したFileIOExceptionは、メニュー画面クラスで捕捉されたくないので、ファイル入出力クラスDでTry~Catch句を書く。このCatch句の中には次のファイルにアクセスするための処理を書くことになる。

TRYCATCH

下記のサンプルはエントリポイントのTry~Catch句の例である。エントリポイントでは最初の画面(Form1)をオープンしている。


下記のサンプルは、ファイルの読み取りに失敗することが致命的なエラーではなく、読み飛ばすことが仕様である場合の例である。読み飛ばすので例外が発生したらキャッチはするが、何も処理をせず次の処理が実行される。

トラックバック

トラックバックURL:
http://www.apricot-jp.com/cgi/mt/mt-tb.cgi/315

関連情報

Copyright(C) 2007 アーキテクト360 Allrights reserved.