2012-02-19 15 views
15

ho ricercato l'uso di una condizione quadro per verificare i dati, invece diQuale dovrei usare, CodeContract o CuttingEdge.Conditions?

if(cond) throw new SomeException(); 

SomeFramework.MakeSure(cond); 

Alla fine la mia scelta è quella di utilizzare sia i CodeContract o CuttingEdge.Conditions quadri.

Non riesco a decidere quale framework utilizzare. Posso dirvi che ciò che non mi piace del framework 'CodeContract' è che dovete installare l'extra msi per poterlo usare e le opzioni che dovete scegliere; non è male, ma non è naturale. (E ovviamente è ancora sotto la ricerca della SM.)

Cosa ne pensi?

+0

Beh, per 'CuttingEdge.Conditions' è necessario installare roba troppo. – Tigran

+0

È necessario aggiungere una libreria al progetto non un file msi all'intero VS – guyl

+0

In entrambi i casi si aggiungono riferimenti a dll di terze parti nel progetto. – Tigran

risposta

12

Il framework CodeContracts fa parte di .NET 4. Quindi è possibile scrivere codice contro di esso senza dover installare nulla, è solo che senza il componente di riscrittura i contratti di codice non avranno alcun effetto in fase di runtime. Prendo questa inclusione nel framework come un segno che Microsoft intenda integrare i contratti di codice in futuro.

Secondo le statistiche sul CuttingEdge.Conditions CodePlex page, è stato scaricato solo 4.189 volte. Ci sono alcune cose carine sulla sintassi, ma a meno che non ci sia qualcosa di specificamente supportato da CuttingEdge.Conditions e non da CodeContracts, si potrebbe anche aderire alla versione che fa parte di .NET.

Le caratteristiche principali dei contratti di codice, per quanto mi riguarda, sono i seguenti:

  1. È possibile impostare i contratti di codice sulle interfacce, per specificare il comportamento atteso di tipi di attuazione di tali interfacce.

  2. I contratti di codice sono ereditati.

Non ho provato CuttingEdge.Conditions, ma non è ovvio che supporta queste due caratteristiche (mentre CodeContracts fa).

10

La differenza principale è che i Contratti di codice includono un controllo statico. Ciò significa che i tuoi contratti saranno controllati al momento della compilazione per la correttezza.

Inoltre, se si sta creando per .NET 4, gli utenti non devono installare nulla. Il rewriter funziona in fase di compilazione e il resto di CC fa parte di .NET.

+1

Wow - "Ora c'è solo una versione che funziona con ogni edizione di Visual Studio (eccetto Express) e include il controllo statico!" Quindi non è più Ultimate, solo per quella caratteristica! :) – TrueWill

+1

sei sicuro, come so per fare funzionare 'Contratto' (inserire l'IL) hai ancora bisogno di installare il msi e impostare il rewriter? – guyl

+5

@guyl: Sì, ma solo la macchina che crea il codice deve averlo installato. Una volta che le DLL vengono riscritte, è possibile eseguirle su qualsiasi macchina senza Contratti di codice. – porges

5

Edit: mi raccomando la gente usa https://github.com/adamralph/liteguard

CuttingEdge.Conditions è stato biforcuta per diventare solo condizioni. L'autore originale non manteneva più né utilizzava il progetto: https://conditions.codeplex.com/workitem/20064

CodeContracts non implementati in Mono. C'era un progetto GSOC ma non si è conclusa con una soluzione completa quindi Conditions è la tua unica scelta se si prendono di mira piattaforme Xamarin.iOS/Xamarin.Android/Xamarin.Mac o solo mono in generale.

La biblioteca è ora una libreria di classi portatile e supporto cross-platform per default è in:

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

Problemi correlati