私は、例外の後に来るものにさらに答えを向けます:それは何のために、ソフトウェアはどのように振る舞うべきか、ユーザーは例外で何をすべきか?私がキャリアの初期に出会った素晴らしいテクニックは、常に3つの部分で問題とエラーを報告することでした:コンテキスト、問題と解決策。このディシプリンを使用すると、エラー処理が大幅に変更され、オペレーターが使用するソフトウェアが大幅に改善されます。
以下に例を示します。
Context: Saving connection pooling configuration changes to disk.
Problem: Write permission denied on file '/xxx/yyy'.
Solution: Grant write permission to the file.
この場合、オペレーターは何をすべきか、どのファイルに影響を与える必要があるかを正確に知っています。また、接続プーリングの変更が行われなかったため、繰り返す必要があることも知っています。
Context: Sending email to 'abc@xyz.com' regarding 'Blah'.
Problem: SMTP connection refused by server 'mail.xyz.com'.
Solution: Contact the mail server administrator to report a service problem. The email will be sent later. You may want to tell 'abc@xyz.com' about this problem.
私はサーバー側のシステムを作成し、私のオペレーターは一般的にハイテクに精通した第一線のサポートです。対象読者が異なるが同じ情報を含むデスクトップソフトウェアについては、メッセージの書き方を変えます。
このテクニックを使用すると、いくつかの素晴らしいことが起こります。多くの場合、ソフトウェア開発者は自分のコードの問題を解決する方法を最もよく知っているので、コードを書いているときにこのようにソリューションをエンコードすることは、多くの場合、情報が不足しているため、ソリューションを見つけることに不利なエンドユーザーにとって非常に有益ですソフトウェアが正確に何をしていたか。Oracleエラーメッセージを読んだことがある人なら誰でも私が言っていることを知っているでしょう。
頭に浮かぶ2番目の素晴らしいことは、例外で解決策を説明しようとしているときに、「Xをチェックし、AならばB、そうでなければC」を書いているときです。これは、例外が間違った場所でチェックされているという非常に明確で明白な兆候です。プログラマーはコード内の事柄を比較する能力があるので、「if」ステートメントをコード内で実行する必要がありますが、なぜユーザーを自動化できるものに関与させるのですか?おそらく、コードの深部からのものであり、誰かが怠zyなことを行い、任意の数のメソッドからIOExceptionをスローし、何が間違っていたのかを具体的に説明できない呼び出しコードのブロックでそれらすべてから潜在的なエラーをキャッチした可能性がありますコンテキストとその修正方法。これにより、きめの細かいエラーを記述し、コード内の適切な場所でそれらをキャッチして処理し、オペレーターが実行する必要のある手順を適切に明確にすることができます。
ある会社では、ソフトウェアを非常によく理解し、エラー報告を増やし、解決策を提案する独自の「ランブック」を保持する一流のオペレーターがいました。これを認識するために、ソフトウェアには例外としてランブックへのWikiリンクが含まれるようになりました。これにより、基本的な説明が利用できるようになりました。
この手法を試してみれば、独自のコードを作成する際にコードで例外に名前を付けるべきことが明らかになります。 NonRecoverableConfigurationReadFailedExceptionは、オペレーターに対してより詳細に説明しようとしているもののちょっとした略記になります。私は冗長であることが好きで、コードに触れる次の開発者が解釈しやすくなると思います。