2012-01-05 8 views
5

タイトルはかなり言いますが、ここにいくつかの背景があります:例外をスローする以外何もしないメソッドを書くのは悪い習慣ですか?

私は存在のためにファイルパスのリストをチェックする必要があるASP.Net MVCアプリケーションがあります。いずれかのパスが存在しない場合、エラーが返されます。

現在、OnExceptionイベントが実装されているベースコントローラがあります。ここでは、未処理の例外が処理され、例外のメッセージとともにエラーページがユーザーに返されます。

私が上記のチェックを行う最も簡単な方法は、各パスの存在をチェックするメソッドを作成し、それらのいずれかが失敗した場合、単に例外をスロー(およびログ)します。この例外は、ベースコントローラによって処理され、適切なメッセージがユーザに返されます。

私の問題は、これを行うことは悪い習慣のように感じることです。私はvoidを返すメソッドを書いています。その唯一の目的は、パスの1つが存在しないというまれなケースで例外をスローすることです。ほとんどの場合、何もしません。これは悪い考えですか?

+2

何が間違っていると思いますか?一般的な方法ですが、.NETフレームワークのソースコードでもその例を見ることができます。 –

+0

私はそれが間違っていると思う。しかし、そうではないというフィードバックを得ることは良いことです。 – zaq

答えて

8

何も問題はありません。

.NETフレームワークでもこれが行われます。たとえば、CancellationTokenには、ThrowIfCancellationRequestedというメソッドがあります。これは、何らかの条件によって投げたり投げたりしないものです。

もう1つの例:DispatcherVerifyAccessメソッド呼び出し元がコントロールと同じスレッド上にあるかどうかをチェックし、そうでない場合はスローします。

+0

よかった。ありがとう! – zaq

0

オンにすると、新しいnotimplementedexceptionをスローするオプションが存在するため、メソッドを作成して後で実装することができます。したがって、悪い習慣ではありません。悪い習慣は、アプリケーションをプロダクションにリリースするときにそこに残すことです。理由がないのにエラーを出すのは悪い習慣です。

TDD(テスト駆動開発)の場合は、メソッドを作成してから、実装されていない例外で失敗したユニットテストを作成し、最後にテストに合格するメソッドを実装します。

Btwはあなたの質問のタイトルに答えていましたが、メソッドが何かをしているので、質問の名前を変更する必要があります。それが何かをして常に例外をスローするのは悪い習慣ですが、例外はコストがかかります。エラーをログに記録して、例外なく移動してください。ブール値を返すPathExists関数を実行する方がよいでしょう。それはより良い解決策です。 (たとえ誰かが何の理由もせずに-1と投票したとしても)

+0

私は、あなたがサイトにとどまるように+1を与えましたが、これは良い答えではないと私は考えています。 'NotImplementedException'を使ったあなたの例は全く異なります。また、あなたの答えの3番目の段落はもう少し無関係であり、コメントとして投稿しておくべきです。 –

+0

問題のメソッドが常に例外をスローするとは限りません。実際、ほとんどの呼び出しは例外をスローしません。例外は、パスの1つが存在しない場合にのみスローされ、通常はそうではありません。ブール値を返すと、無効なパスに関する情報が失われます。ところで、私はあなたに投票しなかった、あなたの推論は説明されて理にかなっているが、それは私の状況にはあまり合わない。 – zaq

+0

次に、通常のビジネスですが、失敗した場合は例外をスローし、そうでなければvoidを返します。だから、まったく悪い練習ではなく、何かをチェックするただの空の方法です。 – H27studio

0

いくつかの人は、悪い考えだと言うかもしれません。ある発信者にエラーを伝えるために例外を発生させたい場合(おそらく、不透明なサードパーティのコードでライザーから分離して)、それを実行します。最終的なアービター - 「それは機能するの?」

関連する問題