我非常喜欢用我使用的语言编写断言,合同或任何类型的支票。让我感到困扰的一件事是,我不确定处理重复支票的通用做法。
情况示例:我首先编写以下函数
void DoSomething( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
//code using obj
}
然后几个小时后,我编写了另一个函数,该函数调用第一个函数。由于所有内容仍在内存中,因此我决定不重复合同,因为我知道DoSomething
已经检查了一个空对象:
void DoSomethingElse( object obj )
{
//no Requires here: DoSomething will do that already
DoSomething( obj );
//code using obj
}
明显的问题:DoSomethingElse
现在依赖于DoSomething
验证obj不为null。因此,应该DoSomething
决定不再检查,或者如果我决定使用另一个函数,则可能不再检查obj。毕竟,这导致我要编写此实现:
void DoSomethingElse( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
DoSomething( obj );
//code using obj
}
始终安全,无后顾之忧,只不过如果情况恶化,则可能会多次检查同一对象,并且这是一种重复形式,我们都知道这样做不是很好。
对于这种情况,最常见的做法是什么?
ArgumentBullException
?这是一个新的:)