2016-05-03 18 views
-2

呼び出しメソッドと呼び出しメソッドで重複して例外を処理することに関する質問があります。次の例を考えてみてください。C#の例外処理のベストプラクティス

protected void method1(string action) 
{ 
    if (string.IsNullOrWhiteSpace(action)) 
    { 
    throw new ArgumentException("action cannot be null or empty or white space."); 
    } 
    //do something 
} 

public void method2(string name, string action) 
{ 
    if (string.IsNullOrWhiteSpace(name)) 
    { 
    throw new ArgumentException("name cannot be null or empty or whitespace."); 
    } 
    method1(action); 
    //do something 
} 

上記の例では、method2でnullのアクションもチェックする必要がありますか?メソッド1で処理されるので、重複したコードが生成される可能性があるため、処理する必要はありません。

例外処理のベストプラクティスについて学ぶ上で、どんな提案も大きな助けになるでしょう。ありがとう

+0

オピニオンベースで閉鎖する必要があるかもしれませんが、 'action'がnullの場合に壊れる唯一のメソッドが' method1'であれば、例外を発生させる必要があります。 'method2'でもそれをチェックしなかったなら、私はそれを"間違っている "とは考えていません。 –

+3

'method1'が' private'か 'public'かによって異なりますので、' method2'が公開エントリーメソッドであれば、プライベート 'method1'の事前チェックメソッドとして役立ちます。 Nitpick: 'IsNullOrWhiteSpace'をチェックしますが、エラーメッセージは" action is null "になりません。 –

+0

ここをクリックhttps://msdn.microsoft.com/en-us/library/seyhszts(v=vs.100).aspx Googleで検索すると、多くのリソースが見つかります – Mostafiz

答えて

-2

いつもチェックしています。私はコードがどのように動作するのかを知っています今度はですが、今後どのようになるか分かりません。コードが変更されます。私の手や他人の手によって。チェックしないコードは、爆発するのを待つ時爆弾です。

+1

公正であるために、それはチェックされています。問題はそれがチェックされるべきかどうかです。 –

+0

OPのユースケースが何であるかは分かりませんが、表面上では、 'method2'は' method1'を別のパラメータセットで呼び出す別の方法かもしれません。その場合、私はあなたの答えが間違っていると思います。可能であればmethod2には論理を持たないように努力するべきです –

+0

もう一度同意しなければなりません。あなたは正しいです。問題は、他の誰かが来て、何かを変えたときです。あなたは常に将来を守るために防衛的にコーディングする必要があります。あなたがそれを書いたので、それを書いた人が実際にそれを壊したかどうかにかかわらず、常にそれを書いた人が責任を取ることを私たちは皆知っています。 –

2

あなたmethod1method2private/internal実装であるだけにしてあなたは、両方のメソッドに引数ガードを配置する必要はありませんmethod2によって呼び出されている場合。

+0

method1がプライベートまたは内部でない場合はどうなりますか?ここでそうかもしれないようです。 –

+0

この回答が掲載されたとき、両方のメソッドは修飾子を持たないため、OP内の両方とも 'private'でした。 –

+0

@MatthewWatson彼らはまた、戻り値の型も持っていなかったので、完全なメソッドのシグネチャは単純にそこになかったと言うことができます。 –