0

例を次に示します。「ReadOnlyDictionary」クラスをオンラインで見たところ、次のコードが含まれていました。

void ICollection.CopyTo(Array array, int index)
{
    ICollection collection = new List<KeyValuePair<TKey, TValue>>(this._source);

    collection.CopyTo(array, index);
}

たとえば、null 引数の配列をチェックする必要がありますか、それとも CopyTo メソッドにそれを行わせる必要がありますか? 少し冗長に思えますが、ベスト プラクティスですべてを独自の方法でチェックするように指示されている場合、それが私がやりたいことです。「ベストプラクティス」が何をすべきかわかりません。

4

2 に答える 2

1

他の誰かのライブラリまたは API* が私の入力について文句を言う場合、私はそれらの入力を提供したくありません。最初に検証および/または文句を言いたいです。これは、データベースや Web サービスの呼び出しなど、外部 API への呼び出しが高価な場合に特に重要です。

API が拒否する入力はわかっています。それらを送信しないで、独自のパブリック API で無効にします。


*注: 私自身のパブリック バウンダリーも同じものと考えています。Foo与えられた引数を好まないクラスがある場合、そうする前のあるレベルFooで を呼び出すと、引数を検証します。すべてのレベルでこれを行うわけではありません (おそらく、プライベート メソッドを呼び出すプライベート メソッドなど、間接的なレイヤーがあると仮定します) が、合理的なパブリック境界で検証します。早期に検証し、とにかく拒否されるときに複雑なロジックや作業を実行させないでください。

于 2011-09-16T15:46:54.197 に答える
1

arraynull ではないことに依存する何かを行う予定がある場合は、これを確認する必要があると言うのが賢明だと思います。しかし、それが単なるパススルーである場合、チェックする必要がある理由がわかりません。

別の考えは、メソッドが将来複雑になるかどうかです。誰かがコードを変更して、arraynull である可能性があることに気付かずに使用する可能性があるため、まだ確認する必要があるかもしれません。これは、私の意見では、適切なコードを維持するためだけのものです。

于 2011-09-16T15:44:16.670 に答える