http://blogs.msdn.com/b/nakama/archive/2009/01/02/net-part-1.aspx
http://blogs.msdn.com/b/nakama/archive/2009/01/02/net-part-2.aspx
を読んで、例外処理について、自分なりに理解して、まとめてみました。
例外処理について、詳細に書いてある本はないので、理解するよいと思います。
まず、
例外処理とは、「業務フローからは、はみだしてしまった想定外の事が起こった時のエラー処理」となります。
尚、例外処理は、エンドユーザーに通知してはいけません。
通知するエラーは、業務エラーになります。
(業務エラーでは、NULLで返すのは、何が原因でエラーになるのか、分からないので、使用しないほうがよい)
・データベース接続エラー
・ネットワークエラー
・メモリ不足
などが発生した場合に、この状況を例外処理します。
ただし、
よほどのことがない限り、アプリケーションで try-catch を書いてはいけません。
例外が発生した場合に、
try~chatchを実装しないと、上位の呼び出し元に通知していきますので、最後はランタイムが例外を補足します。そして、ランタイムが例外エラーダイアログを表示します。
Windowsフォームの場合には、 Application.ThreadException イベントハンドラが自動で呼び出されます。よって、ここにエラーメッセージ通知をカスタマイズしておきます。
これらの処理をカスタマイズしておけば、try-catch による例外の後処理を個別に作り込む必要性はなくなります。
どうしても、業務フローに戻りたいエラーの場合だけ、try~catchを実装します。
尚、catch文内のthrowはcatchした後でありながら、chatchしなかったことになります。
しかし、やむえず、try~chatch文を書くときは、次のようなコードにします。
・try-catch ブロックは、例外が発生しうる『1 行』のみを囲む。
・一般例外(Exception クラス)ではなく、特定の例外(SqlException など)のみを捕捉する。
・catch した後には、必ず後処理(業務エラーへの変換など)を記述する。
ただし、try~finallyの場合は、別になります。
・try-finally ブロックは、アプリケーション全体を囲む。
・一般例外(Exception クラス)すべてに対して有効になるように記述する。
・catch ブロックは書かない。
これらを考慮にいれて、try~finallyの中にtry~chatchを入れて記述したりします。
でも、try~catchは使わないのが原則ですけどね!。
それと、try~catchを使う場合は、リソースのメモリリークに注意してくださいね。
例外処理をあまくみていた。。。。。
そもそもC++でtry~chatchはつかっていないんだから、try~catchは使わないコードを記述しないように心掛けよう。
0 件のコメント:
コメントを投稿