考虑这两种方法
public int GetSomething(object obj)
{
Contract.Requires<ArgumentNullException>(obj != null);
...
}
public int GetSomethingWrapper(object anotherObj)
{
var obj = GetObj(anotherObj);
return GetSomething(obj);
}
让我们考虑GetObj
是安全的,即它不会抛出任何例外
因此,如果obj为null,则GetSomething
和GetSomethingWrapper
抛出execption。但在后一种情况下,例外的起源是GetSomething
方法。
问题是我是否要为GetSomethingWrapper
添加支票?
一方面:不关心它的业务。另一方面:两种方法都是公共的,但包装器方法的调用者没有合同信息。
答案 0 :(得分:3)
一方面:不关心它的业务。
是的 - 它正在调用一个合同的方法,因此它应该遵守该合同。遵守合同最简单的方法是强制签订自己的合同。
然后正如你所说的那样,当前GetSomethingWrapper
没有合同的额外问题,所以 应该合法使用null参数调用它......但实际上并非如此。< / p>
所以基本上,是的 - 我也将合同添加到GetSomethingWrapper
。其调用GetSomething
的实施细节不应影响公共合同。