.
Annunci online

alessioricco
producer, consumer, crèpes
16 ottobre 2007
[codice] [tips] Gestione centralizzata dei parametri nelle URL
Anche se il termine globale e locale è usato in modo improprio, rende bene il concetto di parametri che vengono passati nelle URL e che vengono utilizzati in gran parte delle pagine della nostra applicazione e parametri che vengono utilizzati solo in poche (o addirittura una) pagine.

Una buona regola è quella di gestire i parametri utilizzando una sola funzione il cui codice è condiviso da tutta l'applicazione e che abbia come scopo, per ogni possibile parametro di ingresso ammissibile dall'applicazione, quello di:

  • verificare se il parametro esiste oppure no e impostare il relativo valore di default, se necessario
  • verificare se il tipo che ci aspettiamo dal parametro è quello giusto
  • accedere al dbms per prendere quelle informazioni che nel 90% dei casi dobbiamo andare a prendere ogni volta che quel parametro è settato.
i vantaggi di questa metodologia sono i seguenti:
  • si evitano inutili ripetizioni di codice e copia-incolla suscettibili di bug
  • si ha un unico punto centralizzato che gestisce i parametri di ingresso, cosa che rende estremamente piu' semplice e immediata la manutenzione del codice.
Lo svantaggio piu' evidente è che viene eseguito del codice anche quando non è necessario.

Tag inseriti dall'utente. Cliccando su uno dei tag, ti verranno proposti tutti i post del blog contenenti il tag. asp.net spaghetti code

permalink | inviato da alessioricco il 16/10/2007 alle 17:46 | Leggi i commenti e commenta questo postcommenti (0) | Versione per la stampa
12 ottobre 2007
[codice] [BUG] Quando devi cambiare il codice al volo....
Prendiamo una funzione stupida come questa:
In pratica verifica che due stringhe siano uguali, assumendo che la prima stringa (x) inizi sempre per "00" e la seconda non debba mai iniziare per "00". Questo è quanto risultava infatti dalle specifiche.
Questo codice nasconde anche una insidia, infatti questo test funziona a meraviglia se x è stringa vuota, infatti ritornerà sempre false.

Public
Shared Function sameString(ByVal x As String, ByVal y As String) As Boolean
    Return x= "##" & y
End Function

Adesso, a circa 30 minuti prima della messa online dell'applicazione una telefonata ti fa capire che le specifiche sono diverse.. e che forse sarebbe meglio che il confronto tra le due stringhe fosse fatto da destra verso sinistra. La funzione, al volo viene riscritta ed ecco il patatrac!

Public Shared Function sameString(ByVal x As String, ByVal y As String) As Boolean
    Const CHARS As Integer =  <un numero, supponiamo 5>
    Dim yy As String = Right(y, CHARS)
    Dim xx As String = Right(x, yy.Length)
    Return xx = yy
End Function

Questa funzione è sbagliata! O meglio, questa funzione non fa quello che ci si aspetta debba fare perchè nel caso in cui x fosse stringa nulla, ritornerebbe true !

Prima di tutto alcune considerazioni:
1) ATTENTO ALLE PRECONDIZIONI IMPLICITE
La prima funzione ha un errore invisibile, ovvero le precondizioni della funzione sono implicite. anche se la stringa x è vuota la funzione è corretta. Questo assunto è corretto ma pericoloso, perchè basta che cambino le specifiche, modificando il codice della funzione la precondizione invisibile va a farsi benedire, perchè essendo sottointesa, è facile che te la dimentichi.

2) SCRIVI CODICE CHIARO E LEGGIBILE (e pure due commenti già che ci sei...)
Modificare il codice in corsa è il peggio che ti possa capitare, puoi anche lavorare dei mesi ad un progetto che c'e' sempre qualcosa che non è stato detto fino in fondo, qualcosa che tutti hanno dato per scontato e che nessuno ha esplicitato. C'e' sempre un problema che deve essere fissato poco prima o durante il rilascio. E' del tutto normale, purtroppo :(

3) QUATTRO OCCHI SONO MEGLIO DI DUE
Quando devi cambiare il codice al volo, non cambiarlo mai da solo. soprattutto se lo fai alle 2:30 del mattino. Trovati un collaboratore che possa rendersi conto delle modifiche che fai. Quattro occhi sono meglio di due e poi il tuo collaboratore potrebbe essere particolarmente motivato a pizzicarti in fallo. Sfrutta a tuo vantaggio questa cosa :)

4) DUE RIGHE IN MENO POSSONO SIGNIFICARE MOLTE ORE IN PIU'
Public
Shared Function sameString(ByVal x As String, ByVal y As String) As Boolean

    Const CHARS As Integer =  <un numero, supponiamo 5>

    ' Testa i parametri di ingresso
    if x.Length < CHARS then Return False
    if y.Length < CHARS then Return False

    Dim
 yy As String = Right(y, CHARS)
    Dim xx As String = Right(x, yy.Length)
    Return xx = yy
End
Function
 

Tag inseriti dall'utente. Cliccando su uno dei tag, ti verranno proposti tutti i post del blog contenenti il tag. bug asp.net vb.net debug

permalink | inviato da alessioricco il 12/10/2007 alle 16:41 | Leggi i commenti e commenta questo postcommenti (1) | Versione per la stampa
sfoglia
settembre        novembre