Attualmente sto sviluppando un piccolo framework AI (algoritmi genetici/reti neurali) in C#, per un progetto universitario.Come si asserisce nel codice algoritmico in .NET?
La mia prima preoccupazione è lo sviluppo di un framework riutilizzabile, quindi sto progettando tutto per essere piuttosto modulare. So che sto pagando un prezzo per questo (spettacolo), ma sento che ho più da guadagnare che da perdere con esso (preferibile avere il codice due volte più lento di dover perdere due volte tanto tempo dopo cercando di trovare impossibile trova bug e perdi un sacco di tempo cercando di aggiungere cose nuove che sono difficili da introdurre in un blocco di codice monolitico).
Mi piacerebbe avere un sacco di controlli su diverse parti del mio codice, asserzioni, in sostanza. Verifica se durante l'esecuzione del metodo XI sono effettivamente in uno stato corretto, ecc. Quelle tipologie di asserzioni sono utili quando si sviluppano, ma mi piacerebbe che stessero lontano dal codice di rilascio (cioè, quando deciderò che voglio andarmene questo lavoro per la notte per ottenere i miei risultati finali di ricerca).
posso vedere diversi modi di realizzare questo:
- System.Diagonists.Assert famiglia di metodi.
- Codice Contratti
- Avere se (x) poi gettare InvalidStateException() circondato da #if DEBUG/#endif
Come faresti e perché?
Sono anche a conoscenza dei Test di unità (li sto usando), ma mi piacerebbe anche avere qualche tipo di asserzione sul codice.
I contratti con codice non funzionano in modo simile? Ho avuto l'idea che potessi spegnerli completamente in modalità Release, o qualcosa del genere. –
Forse. Onestamente non ho familiarità con esso. La tecnica nella mia risposta è quella che uso, quindi ho pensato di condividerlo. Non posso dire se sia meglio o peggio dei Contratti di codice. – cdhowie
Vorrei andare con quello che dice cdhowie. il contratto di codice offre molto di più ma probabilmente non è quello che ti serve nel tuo caso. Quindi penso che lo strumento giusto stia usando metodi decorati con l'attributo Conditional piuttosto che inline # if, # else o Debug.Asset() che ingombrano il tuo codice in linea. –