場合は、ユーザー定義の例外といくつかの良い例/ベストプラクティスを使用するには?

StackOverflow https://stackoverflow.com/questions/2600607

質問

私は、ほとんどのユーザー定義の例外は、ビジネスロジック・レベルの例外のためのものであることを前提としていますが、ユーザ定義の例外を使用するには、いくつかの良い理由は何であり、

?いくつかの良い例ものです

あなたは一貫したエラーメッセージを定義することができ、ユーザ定義の例外の唯一の利点ですか?

彼らは本当に多くの有益な?

作るために、例外の内側に書き込むことができます。

どのようなロジック

すべての後、あなたはこの行うことはできません。throw new Exception("Some Error Message");

役に立ちましたか?

解決

それはあなたが特定の方法で、エラーの種類を処理することができますので、

ユーザー定義の例外を持つことは有用です。彼らは異なるテキストメッセージでのSystem.Exceptionとしてすべての例外を投げることができれば、なぜ.NETは、例外のように多くの異なる種類を定義していますか? .NETの例外の異なる種類があることの理由は、あなたがエラーの個々の種類をキャッチし、違ったそれらを扱うことができるということです。あなたが発生した例外の種類に基づいて異なる応答を提供できるように - それはあなたがあなた自身のユーザー例外を定義するのと同じ理由です。

また、追加のデータを含むユーザ定義の例外を作成することができます。たとえば、列挙型、何が悪かったのかを識別するために呼び出すプログラムに役に立つかもしれない整数エラー・コードまたは何か他のものに基づいて重要度レベルを定義することができます。例外に含めるためのロジックについては、私は一般的にちょうど何が悪かったのか報告し、呼び出し元のプログラムにロジックを(エラーについて何をすべきかを)残すようにしてみてください。いくつかのケースでは、私はそれが(例えば、警告がスローされますが、重大なエラーのみがログファイルに書き込まれます)は、特定の重大度レベルを超えた場合は例外コードが自動的にログファイルにエラーを書き込む必要があります。

他のヒント

あなたは非常に少数のユーザー定義の例外を作成する必要があります。誰かが例外をキャッチし、それを何かの特定をするつもりされている場合彼らはのみ使用してください。異なったコードの振る舞いをするつもりされていない代わりにInvalidOperationExceptionのあなたの例外をスローする場合は、InvalidOperationExceptionをスローします。

すでにあなたは異例な状況のために使用することができものを見つけることができれば、あなたが使用する必要があります.NETフレームワーク、中の例外のかなり多くがあります。

これまでの値が正しく解析することができないときます。

例えば、(通常はConfigurationManagerのラッパーです)私の設定クラスに私はConfigurationErrorsExceptionを投げます

specficフォーマットを必要とテキストまたは何か他のものからカスタム値を解析し、解析が失敗した場合、私はFormatExceptionを投げる

私は£10を撤回するために私BankAccountオブジェクトはそれで十分なお金を持っていない場合、それは今までに発生した場合、その方法は、私は、その特定のエラーケースを扱うことができるので、しかし、私は書いて、スローInsufficentFundsExceptionます。

・ホープ、この(やや)助けます。

いいえ、彼らはメッセージのためだけではありません。あなたは、catchブロックの例外リスト内のユーザー定義されたものを探すことができます。

catch(UserDefinedException){}
catch(Exception){}

あなたはいつでもあなたが起こる何かの特定を探したいユーザー定義の例外を使用することができます。たぶん、クライアントIDが指定された範囲外であると、あなたは、特にそのために見てみたいです。代わりに、エラー(痛みをすることができ、そしてメッセージが後で道を変更する場合のように、エラーが発生しやすい)メッセージを解析するので、あなたが使用して例外を持っていて、コード内のどこかを具体的に語っていることを知っていますあなたは「ねえ、これが起こった。あなたはそれを認識する必要があります。」

ユーザー定義の例外は、コンポーネントの消費者次いでキャッチ(例外)ブロック粒度の大きいレベルでそれらをキャッチする能力を可能にするためにコンポーネント内で使用することができます。これがスローされた例外に基づいて異なるタスクを実行する能力を持つコンポーネント消費者に提供します。消費者はこのように区別するためにそれらを使用することを本当の期待があるときに、ユーザー定義の例外は、本当に作成する必要があります。

また、(非管理APIを呼び出すときなど)、エラーコードとしてユーザ定義の例外と追加のメタデータを格納するプロパティを追加することができます。これは、よりユーザーフレンドリーなだけでExceptionオブジェクトのDataプロパティにものを置くよります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top