最佳实践——如果另一种方法检查了某些先决条件,是否有必要这样做?

本文关键字:是否 先决条件 这样做 如果 另一种 方法 检查 最佳 | 更新日期: 2023-09-27 18:09:02

下面是一个例子。我在网上看到了一个"ReadOnlyDictionary"类,它有以下代码:

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

例如,我应该检查数组是否为空参数,还是应该让CopyTo方法为我做这件事?这看起来有点多余,但如果最佳实践说要在自己的方法中检查所有内容,那么这就是我想要做的。我只是不确定"最佳实践"是怎么说的。

最佳实践——如果另一种方法检查了某些先决条件,是否有必要这样做?

我认为明智的做法是,如果你打算用array做一些依赖于它不为空的事情,那么你应该检查一下。但如果它只是一个通行证,我不认为你有什么理由要检查。

另一个想法是,如果方法在未来变得复杂。您可能仍然需要检查它,因为有人可能修改代码并使用array,而没有意识到它可能是空的。在我看来,这只是为了维护好的代码。

如果别人的库或API*要抱怨我的输入,我不想给它那些输入,我想先验证和/或抱怨。如果对外部api的调用开销很大,比如数据库或web服务调用,这一点尤其重要。

你知道API会拒绝哪些输入。不要发送它们,在你自己的公共API中使它们失效。


*注:我认为我自己的公共边界是同样的事情。如果我的类Foo不喜欢给定的参数,如果我调用Foo,在某个级别之前,我将验证我的参数。您不会在每个级别上都这样做(假设有间接层,可能有私有方法调用私有方法等),但是在一些合理的公共边界上,我将进行验证。尽早验证,不要让复杂的逻辑或工作在无论如何都会被拒绝的情况下完成。