Soy un gran fanático de escribir afirmaciones, contratos o cualquier tipo de cheques disponibles en el idioma que estoy usando. Una cosa que me molesta un poco es que no estoy seguro de cuál es la práctica común para hacer frente a los controles duplicados.
Situación de ejemplo: primero escribo la siguiente función
void DoSomething( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
//code using obj
}
luego, unas horas más tarde, escribo otra función que llama a la primera. Como todo está fresco en la memoria, decido no duplicar el contrato, ya que sé que ya DoSomething
comprobará si hay un objeto nulo:
void DoSomethingElse( object obj )
{
//no Requires here: DoSomething will do that already
DoSomething( obj );
//code using obj
}
El problema obvio: DoSomethingElse
ahora depende DoSomething
de verificar que obj no sea nulo. Por lo tanto, debería DoSomething
decidir no verificar más, o si decido usar otra función, obj podría no verificarse más. Lo que me lleva a escribir esta implementación después de todo:
void DoSomethingElse( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
DoSomething( obj );
//code using obj
}
Siempre seguro, no se preocupe, excepto que si la situación crece, el mismo objeto podría verificarse varias veces y es una forma de duplicación y todos sabemos que eso no es tan bueno.
¿Cuál es la práctica más común para situaciones como estas?
ArgumentBullException
? Esa es una nueva :)