Sou um grande fã de escrever declarações, contratos ou qualquer outro tipo de cheque disponível no idioma que estou usando. Uma coisa que me incomoda um pouco é que não tenho certeza de qual é a prática comum para lidar com verificações duplicadas.
Exemplo de situação: primeiro escrevo a seguinte função
void DoSomething( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
//code using obj
}
algumas horas depois, escrevo outra função que chama a primeira. Como tudo ainda está fresco na memória, decido não duplicar o contrato, pois sei que já DoSomething
verificaremos um objeto nulo:
void DoSomethingElse( object obj )
{
//no Requires here: DoSomething will do that already
DoSomething( obj );
//code using obj
}
O problema óbvio: DoSomethingElse
agora depende DoSomething
para verificar se obj não é nulo. Portanto, deve DoSomething
sempre decidir não verificar mais, ou se eu decidir usar outra função, o obj pode não ser mais verificado. O que me leva a escrever essa implementação, afinal:
void DoSomethingElse( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
DoSomething( obj );
//code using obj
}
Sempre seguro, não se preocupe, exceto que, se a situação aumentar, o mesmo objeto poderá ser verificado várias vezes e é uma forma de duplicação e todos sabemos que isso não é tão bom.
Qual é a prática mais comum para situações como essas?
ArgumentBullException
? Esse é um novo :)