例外をいつ発行するか?

id:ladybug:20050505#p2 のツリーだが、話題がすり替わった後に例外の発行に関する話がどんどん続いている。ガイドラインは確かにわかりにくいけど、.NET におけるクラスライブラリは、

アプリケーションを作成するとき、catch をまったく書かないで作成しても動作する

というのが1つの条件だと思う。


クラスライブラリは、catch をまったく書かないで作成されたアプリケーションが、機能用件にある仕様をすべて満たす動作をするように設計する。これはかなり明確で分かりやすい基準になるんじゃないだろうか。そのようなルールに則ったクラスライブラリで構築されたアプリケーションは、ユーザのちょっとした操作で例外が発生してしまい結果として異常終了する形になる。とはいえ、本来の機能用件の通りのユーザ操作であれば例外は発生せず、アプリケーションが異常終了することもないことも期待できる。
当然ながら、例外による異常終了はユーザには見せないものではあるが、この時点のアプリケーションを利用して例外が発生した場合、発生した例外の種類と Exception.Message などの説明をみれば、技術者や知識のあるユーザなら何が起こって問題が発生しているかある程度の理解ができる状態となる。あとは、ユーザに例外を見せないため、catch による例外補足と処理フローの制御を行うことでアプリケーションは完成に近づくわけだが、このような形で例外の発行を行うかどうかを判断することができる。


まあ、ようするに業務フロー制御と実装フロー制御の境界を何処に置くか、ってことを実装者*1寄りの視点で書いただけなんだけど。

注:
上記は例外の発行に関する考え方を説明する文章であって、アプリケーション開発プロセスにおいて例外処理を後付けするような開発プロセスを説明する文章ではない(笑

*1:クラスライブラリ利用者