2010-12-09 14 views

Respuesta

25

Siempre que sea posible. Por ejemplo, en cualquier lugar en que se usan una cláusula de guardia en el comienzo de un método como

public void Write(TextWriter tw, object o) { 
    if(tw == null) { 
     throw new ArgumentNullException("tw"); 
    } 
    if(o == null) { 
     throw new ArgumentNullException("o"); 
    } 
    tw.WriteLine(o.ToString()); 
} 

se debe utilizar en lugar

public void Write(TextWriter tw, object o) { 
    Contract.Requires(tw != null); 
    Contract.Requires(o != null); 
    tw.WriteLine(o.ToString()); 
} 

Lo que es bello sobre Contract es que se hacen públicos y se pueden hacer parte de la documentación sin ningún trabajo adicional de su parte, ya que la cláusula de guardia no era pública y solo podía incluirse en la documentación con un poco de trabajo pesado. Por lo tanto, con Contract puede expresar más claramente los requisitos y las promesas en su código.

+3

Además de lo anterior, donde se utilizan los contratos para comprobar las condiciones previas, de manera similar que puede utilizarse para validar las condiciones posteriores, por ejemplo, después de la ejecución del cuerpo del método parcial/completo, afirmando si alguna variable/objeto está en el estado correcto. Además, los contratos también se pueden evaluar de forma estática (en tiempo de compilación). – VinayC

+0

@VinayC: Sí, eso es lo que estaba aludiendo también con "promesas [...] más claramente expresas en su código". Gracias por elaborar para mí. – jason

+0

+1 a los dos; No podría haberlo dicho mejor. – koenmetsu

5

lo que es realmente precioso, con contratos es que usted no tiene que cablear esas cadenas de nombres de argumento feas ...

if(tw == null) throw new ArgumentNullException("tw"); 
+0

Bueno, no necesita CC para hacer este código más agradable. Podría escribir fácilmente algún método auxiliar a la 'Must.Be.NotNull (_ => someExpr);' Es una cuestión de preferencia personal que es "más agradable", por lo que esta no es la ventaja real de usar CC. – stakx

Cuestiones relacionadas