3

システムで生成されたエラーをユーザーにとってより意味のあるものに変換する良い方法があるかどうか知りたいです。たとえば、何らかの理由でアプリケーションが SMTP サーバーに接続できなかった場合などです。「SMTP 接続エラー」のようなシステムによってスローされたメッセージを「メールを送信できませんでした」に変換したいと考えています。この親しみやすいメッセージは、リソース ファイルから抜き出したいものです。これはそのような例外の 1 つの例ですが、さらに多くの例外がある可能性があります。

すべてのレイヤーで try catch ブロックを使用する必要はありません。UI レイヤーにのみ存在します。すべての例外を受け取り、わかりやすい文字列を返す例外管理クラスがあります。UI レイヤーのすべての catch ブロックは、この例外管理クラスを呼び出し、System.Exception 型の例外を渡します。このクラスのメソッドは、UI で使用するために前述のわかりやすいエラー文字列を返す必要があります。

今考えられる唯一の方法は、例外管理クラスに 1 つの大きな IF ELSE ブロックを配置して、受信した例外文字列をチェックし、リソース ファイルから一致するわかりやすいメッセージを引き出すことです。

これについてもっと良い方法はありますか?

4

2 に答える 2

1

そのtry catchため、例外をキャッチする必要があります。一般的なエラータイプではなく、特定のエラータイプで使用してください。catchそのため、ブロック内に任意のメッセージを表示できます。ただし、ブロック内でカスタム例外を再スローすることcatchはお勧めしません。あなたの場合、あなたはキャッチすることができますSystem.Net.Mail.SmtpException

于 2013-03-28T05:44:04.880 に答える
0

例外をユーザーフレンドリーなエラーにマップできるとは思いません。その理由は、例外は非常に低いレベルで「何が」発生したかであり、ユーザーはそれが発生した「理由」とそれを修正するために何ができるかを知りたいだけだからです。FileNotFound「システムが存在しないファイルにアクセスしようとしました」へのマッピングは役に立ちません。代わりに、をキャッチしてFileNotFoundから、アプリケーションの状態に応じて、関連するメッセージを表示します。

もう 1 つのアイデアは、失敗する可能性のあるプロセスごとに異なるエラー メッセージを用意し、そのプロセス中にスローされた例外に対してそのエラー メッセージを表示することです。プロセスと試行キャッチを細かく設定すると、システム エラー メッセージをユーザーが理解できるエラー メッセージにマッピングする場合よりも、はるかに優れた通知システムをユーザーに提供できます。

于 2013-03-28T08:38:52.877 に答える