Pregunta

Microsoft ha puesto recientemente de una liberación de sus Código De Contratos marco en DevLabs con una licencia comercial.Estamos interesados en el uso de ellos en nuestro proyecto (sobre todo C#, C++/CLI) para reemplazar gradualmente todo el código de validación personalizado, pero estoy muy interesado en saber acerca de la experiencia de otras personas han tenido con él antes de que nos comprometemos a que, en concreto:

  • ¿Crees que el marco es lo suficientemente maduro para grandes y complejos proyectos comerciales?

  • ¿Qué problemas han de ejecutar en mientras está usando?

  • ¿Qué beneficios tiene usted de ella?

  • Es, actualmente, de más dolor de lo que vale?

Me doy cuenta de que esto es un poco cuestión subjetiva, ya que se requiere de la opinión, pero dado que este marco es una parte muy importante .NET 4.0 y (potencialmente) cambiar la forma de escribir el código de validación, espero que esta pregunta quedará abierto a adquirir experiencia en el tema para que me ayuden a tomar una decisión específica, responde la pregunta:

Debemos estar comenzando a usar en el próximo mes?

Tenga en cuenta que no enviamos un código de la API, sólo un servicio web de uno, así que para la mayoría de romper el código de compatibilidad en términos del tipo de excepción lanzada no es una preocupación.Sin embargo, como tengo la esperanza de que más personas que como yo se beneficiarán de este post y sus respuestas, cualquier detalle alrededor de esta área, es más que bienvenido.

¿Fue útil?

Solución 2

He estado jugando con el código contrae un poco más a mí mismo en un proyecto independiente pequeña pero moderadamente compleja, que debe heredar de algunas clases de BCL y el uso de otros.

Lo contratos parece grande cuando se trabaja en un entorno completamente aislado con sólo sus propios códigos y primitivas tipos, pero tan pronto como empiece a usar las clases de BCL (que hasta .NET 4.0 no tienen sus propios contratos) el verificador no puede verificar si van a violar cualquiera de los requiere / Asegura / invariantes y así se obtiene una gran cantidad de advertencias acerca de las limitaciones potencialmente insatisfechas.

Por otra parte, lo hace encontrar algunas limitaciones no válidos o potencialmente insatisfechas que podrían ser errores reales. Pero es muy difícil de encontrar hoy porque hay tanto ruido que es difícil averiguar cuáles puede arreglar. Es posible suprimir las advertencias de las clases de BCL mediante el mecanismo de suponer, pero esto es algo contraproducente ya que estas clases tendrá contratos en el futuro y suposiciones disminuirá su valor.

Así que mi sensación es que, por ahora, porque en 3.5 que estamos tratando de construir sobre un marco que el verificador no entiende lo suficiente, que es probablemente vale la pena esperar 4.0.

Otros consejos

La última respuesta madura a esto fue en 2009 y .NET 4 ya está disponible. Calculo que estamos debido a una actualización:

Los contratos código podría muy bien ser lo suficientemente maduros como para sus lanzamientos de depuración.

Me di cuenta que es algo así como una actualización de “inofensiva” a “todo inofensivo”.

El Contratos página de inicio enlaces a la documentación bastante completo en formato PDF. La documentación se describen las pautas de uso en la sección 5. En resumen, usted puede escoger lo valiente que siente acerca de las herramientas de contrato re-escribir su IL en su versión se basa.

Estamos utilizando el modo “no volver a escribir mi IL Release”.

Hasta el momento, estoy más disfrutando de este beneficio inesperado: hay menos código, por lo tanto menos código para probar . Todas sus cláusulas de guardia se derriten.

if(arg != null) { 
    throw new ArgumentNullException("arg"); 
}
// Blank line here insisted upon by StyleCop

se convierte en:

Contract.Requires(arg != null);

Sus funciones son más cortos. Su intención es clara. Y, usted ya no tiene que escribir una prueba llamada ArgumentShouldNotBeNull sólo para llegar a una cobertura del 100%.

Hasta el momento, me he encontrado con dos problemas:

  • Yo tenía una prueba de unidad que se basó en un fallo de contrato para tener éxito. Se podría argumentar la existencia de la prueba fue un error, pero quería documentar esta prohibición en particular en forma de una prueba. La prueba fallida en mi servidor de compilación, porque yo no tenía las herramientas instaladas. Solución:. Instalar las herramientas

  • Estamos utilizando dos herramientas que reescriben IL: Code Contracts y PostSharp . Ellos no se llevaban demasiado bien. PostSharp de 2.0.8.1283 solucionado el problema. Me gustaría cautela evaluar cómo cualquier dos herramientas IL-reescritura se llevan bien, sin embargo.

Hasta el momento, los beneficios son que prevalezca sobre los peligros.

Abordar las preocupaciones fuera de fecha planteadas en otras respuestas:

  • documentación de Code Contracts es bastante completo, aunque, lamentablemente, en formato PDF.
  • Hay al menos un foro Código Contrato organizada por microsoft.
  • Code Contracts Standard Edition está libre si usted tiene cualquier licencia VS2010.
  • .NET 4 está fuera. Me he encontrado con contratos de Microsoft al implementar interfaces de la colección genéricos.

A juzgar por este hilo yo diría que no es lo suficientemente maduro como para utilizar para un proyecto de nivel empresarial. No he utilizado yo mismo, pero la gente todavía se están ejecutando en los insectos que actualizaría su proyecto de contrato-crítico a un alto. Parece que un gran marco y los vídeos de ejemplo que nos ha facilitado han sido emocionante, pero me gustaría esperar a que:

  • La existencia de un foro de la comunidad. Vas a querer ser capaz de discutir los problemas inevitables que topan con otros desarrolladores, y que desea saber que hay una fuerte base de decencia desarrolladores a cabo allí para discutir soluciones con.
  • Un exitoso lanzamiento del proyecto piloto. En general, cuando Microsoft Research libera algo que ellos piensan que es lo suficientemente maduro para ser utilizado en un proyecto comercial, que van a trabajar con una organización para pilotar, y luego suelte ese proyecto de código abierto como una prueba de concepto y el juicio por fuego de todas las principales características. Esto daría mucha confianza que la mayoría de los escenarios de contrato comunes están cubiertos y de trabajo.
  • documentación más completa. Así de simple, en algún momento vas a querer hacer algo con contratos que no se puede hacer sin embargo, utilizando contratos código de Microsoft. ¿Quieres ser capaz de forma rápida y clara razón de que su escenario es aún no compatibles. La documentación actual se va a mantener en vilo y probar cosas diferentes, aunque, en mi opinión, lo que se traducirá en una montón de tiempo perdido.

No es lo suficientemente maduro.

Será tan pronto como Microsoft lanza con las ediciones asequibles de VS, pero sin el análisis de código estático no es utilizable en absoluto.

Las ediciones de VS, que lo tienen, son tan terriblemente caro que sólo un puñado de personas que alguna vez será capaz de pagar.

Es una pena Microsoft mató a esta idea increíble con su política de precios. Me gustaría Code Contracts se convertirían en la corriente principal, pero no lo harán.

Epic Fail.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top