나는 사용하는 언어로 주장, 계약 또는 수표를 작성하는 것을 좋아하는 팬입니다. 나를 조금 귀찮게하는 한 가지는 중복 검사를 처리하기위한 일반적인 관행이 무엇인지 확실하지 않다는 것입니다.
상황 예 : 먼저 다음 함수를 작성합니다
void DoSomething( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
//code using obj
}
몇 시간 후에 첫 번째 함수를 호출하는 다른 함수를 작성합니다. 모든 것이 메모리에서 여전히 DoSomething
최신 상태 이므로 계약을 복제하지 않기로 결정합니다. 왜냐하면 null 객체를 이미 확인 해야한다는 것을 알기 때문입니다.
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
? 그것은 새로운 것입니다 :)