2017-09-28 5 views
0

コードを整理するために以下のことを行う際に特に問題はありませんか?例外を構成するためにネストされたクラスを使用する

public class QueryParameterException 
{ 
    public class BooleanArgumentException : ArgumentException 
    { 
     public BooleanArgumentException(string message) 
      : base(message) 
     { 
     } 
    } 

    public class DoubleArgumentException : ArgumentException 
    { 
     public DoubleArgumentException(string message) 
      : base(message) 
     { 
     } 
    } 

    public class IntArgumentException : ArgumentException 
    { 
     public IntArgumentException(string message) 
      : base(message) 
     { 
     } 
    } 
} 

そして、このようにそれらを参照:

throw new QueryParameterException.BooleanArgumentException($"invalid argument '{queryStringValue}' for boolean parameter '{key}' should be 'true' or 'false'"); 

理由重複していない - 継承は関係ありません。

+0

あなたは技術的に何か他のことを意味していますか?それが動作すれば、それは動作します。 –

+4

この質問は、コードレビュー交換に適しています。なぜ名前空間を使用しないのですか? –

+1

名前空間だけではないのはなぜですか? –

答えて

1

2つの問題があります。

最初に、ネームスペースを使用する代わりにクラスをネストすると、それを複数回参照する場合は、外部クラス名をusingステートメントに移動できないことを除いて同じように動作します。毎回、完全な外部クラス名と内部クラス名を使用する必要があります。

第2は主観的です。将来の開発者の中には、何が起きているのかを30秒以上試してみるかもしれません。彼/彼女は

throw new QueryParameterException.BooleanArgumentException($"..."); 

を見ると、それは彼の現在の仕事とは何の関係もないにもかかわらずQueryParameterExceptionBooleanArgumentExceptionの宣言を見て必要性を感じるかもしれません。

彼がそこに着くと、彼はこれらがちょうどネストされたクラスであることを確認し、それは大丈夫です。大したことではなく、現在の仕事に戻る。しかし、彼はまだ彼の頭を傷つけ、なぜそれが行われたのだろうと思うでしょう。それが動作しても、クラスを名前空間として使用することは珍しいことです。誰かが明らかな理由で何か奇妙なことをしたことを理解したら、コードへの信頼はわずかに(おそらくわずか3%)腐ってしまい、今後はチェックする必要はないでしょう確かに奇妙なことは起こっていない。

+0

Scottに感謝します。私はあなたのポイント、特に最後のものを見ます - 私はしばしば何が起こっているかを確認するために物事をチェックするために時間を費やします - したがって、私はそれを行うより良い/正しい方法を得るために質問した。 – Chris

関連する問題