S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

例外処理

C#と諸々 久々に業務エラーについて
考察が面白い。
以前の記事を辿ると、「業務エラーは戻り値で表現(2006/12/06)」と考えられてたのが、「業務エラーは例外で表すべき(2007/02/25)」とし、「そのどちらでもない(2008/10/15)」と。
例外は、業務として例外を識別する役割を持つクラス(メソッド)が例外としてthrowすべきだよね。ってことで、ユースケースの基本フローの1ステップを正に実装したクラス(メソッド)という認識。
Applicationレイヤで「業務エラーにすべき状況の検出」とあるので、try-catchするのはApplicationレイヤという認識でいいのかな?
であれば、例外をthrowするのはDomainレイヤ(以降)ということでいい感じ。



どこかでも以前例外の話をしたなぁ〜とか。
明示的メソッド例外 - ぱる日記
例外処理は遅くないかも - ぱる日記
C#で「明示的メソッド例外」が記述できんという話が…
C# throws - Google 検索
みなさん同じような認識なのかな。。。
ある意味、C#では「業務のエラーは例外にすべきでない」というスタンスに見えなくもない。
と思ったら、こんな記事見つけた。
.NETとJavaの例外処理の違い - とあるコンサルタントのつぶやき - Site Home - MSDN Blogs
どちらが良い/悪いはともかく、「業務エラーは、メソッドの戻り値として enum 型や構造体クラスなどを使うことで表現する。 」がイマイチ納得できん感じ。


とりあえずASP.NETでは、Page_ErrorまたはOnErrorって仕組みがあるので、画面的な動きはそこで制御(実際はメッセージ表示)すればいいのかな。
抽象クラスに実装して、テンプレートメソッド的に個別画面に個別要件があれば記述するという書き方がよさげかな。
ASP.NETでのWebアプリケーションのエラー処理 / 15 seconds - japan.internet.com コラム