2012-02-19 10 views
15

He investigado el uso de un marco de condiciones para verificar datos en lugar de¿Qué debo usar, CodeContract o CuttingEdge.Conditions?

if(cond) throw new SomeException(); 

SomeFramework.MakeSure(cond); 

Al final, mi opción es utilizar cualquiera de los CodeContract o CuttingEdge.Conditions marcos.

No puedo decidir qué marco usar. Puedo decirle que lo que no me gusta del marco 'CodeContract' es que debe instalar el extra msi para usarlo y las opciones que necesita elegir; no es malo, pero no se siente natural. (Y, por supuesto, aún está bajo investigación de EM.)

¿Qué opinas?

+0

Bueno, para 'CuttingEdge.Conditions' necesita instalar cosas también. – Tigran

+0

Necesita agregar una biblioteca al proyecto, no un msi a todo el VS – guyl

+0

En ambos casos, agrega referencias a dlls de terceros en su proyecto. – Tigran

Respuesta

12

El marco CodeContracts es parte de .NET 4. Por lo tanto, puede escribir código sin tener que instalar nada, simplemente es que sin el componente de reescritura los contratos de código no tendrán ningún efecto en tiempo de ejecución. Tomo esta inclusión en el marco como una señal de que Microsoft tiene la intención de integrar los contratos de código más en el futuro.

Según las estadísticas en el CuttingEdge.Conditions CodePlex page, solo se ha descargado 4,189 veces. Hay algunas cosas buenas acerca de la sintaxis, pero a menos que haya algo específicamente compatible con CuttingEdge.Conditions y no con CodeContracts, también podría apegarse a la versión que es parte de .NET.

Las características esenciales de los contratos de código, por lo que a mí respecta, son los siguientes:

  1. Puede configurar los contratos de código en las interfaces, para especificar el comportamiento esperado de los tipos de aplicación de dichas interfaces.

  2. Los contratos de código se heredan.

No he probado CuttingEdge.Conditions, pero no es obvio que es compatible con estas dos características (mientras que CodeContracts hace).

10

La principal diferencia es que Code Contracts incluye un verificador estático. Esto significa que sus contratos serán verificados en el momento de la compilación para verificar que sean correctos.

Además, mientras esté compilando para .NET 4, sus usuarios no necesitan instalar nada. El reescritura funciona en tiempo de compilación y el resto de CC forma parte de .NET.

+1

Wow - "¡Ahora solo hay una versión que funciona con todas las ediciones de Visual Studio (excepto Express) e incluye el verificador estático!" ¡Así que ya no es definitivo, solo para esa función! :) – TrueWill

+1

¿Estás seguro, como sé para hacer que 'Contract 'funcione (inserte el IL) aún necesita instalar el msi y configurar el reescritor? – guyl

+5

@guyl: Sí, pero solo la máquina que crea el código debe tenerlo instalado. Una vez que los archivos DLL se reescriben, puede ejecutarlos en cualquier máquina sin contratos de código. – porges

5

Editar: Yo recomiendo la gente usa https://github.com/adamralph/liteguard

CuttingEdge.Conditions ha sido bifurcada para convertirse en condiciones justas. El autor original ya no estaba manteniendo ni usa el proyecto: https://conditions.codeplex.com/workitem/20064

CodeContracts no están implementados en Mono. Hubo un proyecto de GSOC pero no terminó con una solución completa, por lo que las Condiciones son su única opción si se dirigen a las plataformas Xamarin.iOS/Xamarin.Android/Xamarin.Mac o simplemente a mono en general.

La biblioteca es ahora una biblioteca de clases portátil y soporte multiplataforma de forma predeterminada está en:

https://github.com/ghuntley/Conditions y https://www.nuget.org/packages/Conditions/