2012-07-11 18 views
5

Sto imparando Sollevare ora. Quando ho letto sui modelli, ho capito che hanno un sacco di cose che non si typechecked al momento della compilazione:Sicurezza di sollevamento e tipo

  • Modelli potrebbe contenere riferimenti a frammenti inesistenti
  • SiteMaps potrebbe riferirsi a pagine inesistenti
  • Snippet metodi di spedizione prendono parametri di stringa dove si può facilmente fare un errore di battitura

Esistono alternative per rendere questo i problemi meno gravi, vale a dire checker codice esterno o opzioni nella libreria che permetterebbero fare la stessa cosa, ma in un tipo modo sicuro? Oppure potrebbe esserci un altro framework web che è più rigido in questa relazione (potrebbe essere in un'altra lingua).

+0

Credo che per la maggior parte di questi casi, potrebbe essere facile scrivere un validatore basato su espressioni regolari. Ma mentre non esiste una cosa del genere, puoi provare a testare il tuo codice: un test corretto dovrebbe catturare tutti quegli errori. – Rogach

risposta

1

Il controllo dei tipi è una funzione di compilazione dei tempi di linguaggi fortemente tipizzati come Scala o Java che consente la verifica delle firme e delle relazioni tra i tipi. Tali verifiche ti impediranno di passare un parametro di tipo Banana quando è previsto un parametro di tipo Meat, o di assegnare una String a una variabile di tipo Int. In genere, in lingue dinamiche come Ruby o Javascript, questo non è possibile

Quello che stai cercando non è un tipo di controllo. Non vuoi verificare che il tuo programma sia sintatticamente corretto, ma piuttosto che si comporta correttamente, e la soluzione per questo è chiamata test automatico.

siete perfettamente in grado di scrivere codice che è sintatticamente giusto, ma si comporta male:

public boolean isTrue(boolean value){ 
     return !value; 
} 

Se si pensa che il contrario, come è possibile verificare una fase di compilazione la correttezza di un modello, che deve essere riempito con alcuni dati?

<!-- importing a snippet depending on the value of a variable --> 
<import src="${snippetName}.xml"/> 

Non è possibile, perché tutte le variabili in fase di compilazione non hanno assolutamente alcun valore. Ecco perché i test automatici sono importanti e la scrittura di casi di test per la tua applicazione non può essere sostituita da controlli in fase di compilazione.

+2

Per me, typechecking riguarda la ricerca di errori in fase di compilazione. E in teoria, molte delle cose che non sono controllate in ascensore possono essere controllate. –

+0

Typechecking è descritto qui: http://en.wikipedia.org/wiki/Type_system. Ti stai riferendo all'analisi del codice statico, che come hai detto può trasformare alcuni errori di runtime in errori in fase di compilazione. Tuttavia, non è banale scrivere un analizzatore di codici statici, provalo ... – Edmondo1984

+2

Il controllo dei tipi è una forma leggera di analisi statica. Ciò che Konstantin vuole è piuttosto fattibile. –