2011-02-07 2 views
1

私はプロジェクトのインフラストラクチャを設計していますが、例外のメッセージをパラメータでフォーマットして動的にすることをお勧めしますか?動的例外メッセージは良い考えですか?

これは、例外メッセージが本当に冗長である可能性があることを意味します。

私の意見では、いくつかのメッセージは期待できないという欠点があります。これらは、例外処理、メッセージがこのかどうか、そしてそれがロギングされているかどうかをテストする際に(ベストプラクティスではありませんが)使用できます。しかし、もっと邪魔になるのは、あなたがどこかでそのメッセージを表示しようとすると、ローカリゼーションをもっと難しくするということです。

だから私の質問はあなたがそれを取ることであり、妥協の解決策を持っているかどうか、私に冗長性(例外を記録する場合)と一貫性の両方を与えてくれます。

ありがとうございました。

答えて

0

例外のパラメータを含めることはしばしば非常に役に立ちます。他の開発者(あなた自身)がメッセージを読んで、バグを見つけようとしていると考えてください。さらに悪いことに、ユーザーは例外メッセージを読んだりフォーラムに投稿したりすることができ、リモートで間違っているものを見つけなければなりません。

例外で特定のメッセージをテストすることは、実際にはベストプラクティスではありません。私はそれを悪い練習と呼ぶだろう。私が知っているすべての言語では、独自のExceptionクラスを定義することができます。また、純粋なクラス名が十分でない場合(通常はそうですが)、クラスにカスタムプロパティを追加できます。例外のメッセージはできるだけ人間が読めるものでなければならず、コードによって予測可能である必要はありません。

もちろん、あなたは何でもすることができます。例外メッセージは、可能なすべての変数をインクルードする必要があるため、大きすぎる/長くするべきではありません。賢明に選ぶ;-)。

+0

私はMSDNのどこかでこの記事を読んでいましたが、そこではいくつかの大きな例外の例外は、例外のための独自の階層を作成することは悪い習慣であると言いました。同氏は、.NETはすでに(自分の意見では)カスタム例外をあまりにも多く定義しており、ほとんどの場合、メッセージの指定で十分であるはずだと述べた。しかし、ローカリゼーションはどうですか?私は例外のメッセージとして辞書キーを送信したいと思います。内部.NETでの処理と同様です。 –

+0

まあ、正直言って、私は例外をローカライズしたことはありません。彼らはいつも平易な英語でした。しかし、通常、javaのMessageフォーマット( '{2}のパラメータ{1}はいいです)'や、.NETのそれとは何か違うものがあります。私はそれが行く方法だと思う。 (ところで、誰が辞書キーを使ったらそれを解決しますか?)。また、デフォルトのもの(invalidParameterExceptionなど、それをコード化しないでください)には、.NETに同梱されているExceptionsを使用しますが、デフォルトのものでカバーされていないものについては、独自のものを作成する方が良いと思います。私の意見。 – yankee

+0

@ Yam:ほとんどの.net例外は、捕捉の観点からはかなり役に立たない。有用な例外階層は、.netの階層とほぼ同じくらいの例外を持つ必要はありませんが、システム状態のどの側面が妨げられているかどうかを定義する必要があります。ネットの階層構造を考えると、多くの場合、最も一般的な例外をキャッチしてラップするだけでなく、システムの状態への影響を記述する例外もあります。 – supercat

関連する問題