Strategie di progettazione per l'archiviazione e la convalida dei numeri di serie

4

Stiamo scrivendo un software per tenere traccia dei Foo Widget. Ogni Foo Widget ha un numero di serie. Il numero di serie è una stringa alfanumerica di 32 caratteri. La stringa è divisa in cinque serie. Ogni set è separato da un trattino (quindi il codice s / n è di 32 caratteri, NON inclusi i trattini).

Ad esempio: 11111111-1111-1111-1111-111111111111. Ma questo potrebbe cambiare, dal momento che il nostro software non sta effettivamente creando i numeri seriali.

Vorrei conoscere le diverse strategie per l'archiviazione del numero di serie e la convalida dell'utente del numero di serie nell'interfaccia utente.

Per cominciare, vorrei parlare delle strategie per memorizzare il numero di serie nel nostro sistema. Questo problema è apparso su Foo Widgets Incorporated, e c'era un disaccordo sul fatto di dover memorizzare ogni numero seriale con o senza i trattini.

Penso che il modo più flessibile di fare questo (ma forse non il più semplice) sarebbe quello di memorizzare il numero di serie senza i trattini, memorizzare lo schema del numero di serie (come espressione regolare), e quindi creare un identificatore che è usato per tracciare quale schema è usato (così in seguito, se il produttore lo modifica, possiamo supportare quello e forse entrambi gli schemi contemporaneamente).

L'argomento contrario era che i trattini "fanno parte dei dati" e che "non sono come un numero di telefono". Ho qualche problema a capire questo punto di vista.

    
posta TheAmpersand 26.02.2013 - 21:24
fonte

2 risposte

3

Per la parte di convalida dell'utente della tua domanda, il principio guida è Legge di Postel : sii prudente in ciò che invii, liberale in ciò che accetti. Ciò significa che dovresti sempre visualizzare il numero di serie con i trattini, ma supponendo che puoi ricostruire correttamente il numero di serie senza di essi, consentire agli utenti di immettere numeri seriali con o senza i trattini.

Per quanto riguarda lo storage, in realtà dipende se è necessario eseguire query sui sottocampi del numero. Se non lo fai, è più robusto memorizzarlo nel formato preferito per leggerlo, cioè con i trattini. In questo modo uno sviluppatore o amministratore di database che esegue una query da un'interfaccia non utente come una CLI non dovrà analizzarlo in testa.

    
risposta data 26.02.2013 - 21:49
fonte
2

Dato che ovviamente stai pensando al modo in cui si formano i numeri seriali, è abbastanza chiaro che il formato del numero È parte del numero.

C'è un grande vantaggio nel mantenere i trattini in posizione - questo è il futuro delle prove. Nel caso in cui si desideri un nuovo formato di numero seriale, se tutto ciò che si sta facendo è archiviare il testo dato (dopo la convalida), quando si ottiene un nuovo formato tutto ciò che si deve fare è validare correttamente e il gioco è fatto.

Se hai elaborato una strategia (come le espressioni regolari che hai menzionato) per archiviare il modulo, devi affrontare la possibilità che il nuovo formato di numero seriale sia qualcosa che il tuo meccanismo non è in grado di affrontare, e tu Dovrò scramble per modificarlo, possibilmente richiedendo aggiornamenti extra su db, ecc. ecc.

Alla fine, sono solo numeri seriali, e mentre ce ne possono essere molti, non renderli più complessi di quanto debbano essere: avere la convalida dell'input assicuri che il numero sia ben formato (e che passi la consistenza interna controlla, se necessario), quindi memorizzarlo così com'è.

A meno che non sia necessario fare una segnalazione strana sui sottocampi dei numeri seriali, E ne hai milioni e milioni, non vale la pena di fare qualcosa di stravagante.

    
risposta data 26.02.2013 - 21:43
fonte

Leggi altre domande sui tag