Devo essere indulgente con i tipi quando accetto i dati JSON? (Stringa vs numero)

2

Sfondo: Quindi, mentre Javascript converte implicitamente vari tipi di dati e quindi può sembrare quasi senza caratteri (esiste una cosa del genere?) Ha tipi diversi.

La maggior parte dei miei colleghi sembra pensare diversamente. I colleghi pre-vendita e non di sviluppo non sono consapevoli di questo e altri sviluppatori (il 90% sono più anziani per me) sembrano pensare che non contano, perché gli utenti non gli interessano davvero.

Problema: Mentre implementa una nuova funzionalità in cui accettiamo un file di impostazione in forma di JSON, la specifica non specifica quali tipi sono i valori. In apparenza questo non è un grosso problema dato che è molto ovvio dedurne i tipi: lo spessore, la trasparenza, ecc. Sono ovviamente numeri, altri sono ovviamente stringhe. Ma dopo aver implementato la funzione, il collega ha affermato che dovrei prendere tutti i valori come prima stringa, quindi tentare di analizzarli per raddoppiare perché molti utenti non conoscono la differenza.

Ha ragione, nel senso che il suo metodo sembra più "difensivo" e la specifica non specifica esplicitamente il tipo di valori. Ma sono un po 'titubante perché penso che stiamo attivamente incoraggiando una cattiva pratica.

Quindi cosa dovrei fare? Chiedere al progettista di specificare esplicitamente i tipi sul foglio delle specifiche? Cambia la mia implementazione per prenderla come stringa? O lasciarlo così com'è e visualizzare l'errore quando viene dato un tipo errato per il valore?

UPDATE: Quello che è successo è che abbiamo deciso di usare una logica comune che accetta anche le stringhe. Ho detto al mio team manager che i tipi mancavano dalle specifiche e ha detto che parlerà con il designer.

    
posta legokangpalla 01.12.2017 - 06:17
fonte

3 risposte

3

"Sii prudente in ciò che invii, sii liberale in ciò che accetti": Principio di robustezza alias la legge di Postel , alias RFC 1122.

In altre parole, dovresti essere indulgente a meno che non ci sia un motivo valido (ad es. sicurezza) per essere severi.

    
risposta data 01.12.2017 - 08:04
fonte
3

Sembra un problema di esperienza utente. Se la configurazione viene scritta manualmente da utenti che potrebbero non conoscere la differenza tra una stringa e un float, i file JSON probabilmente non sono il formato appropriato per l'input. Prendi in considerazione la possibilità di fornire una GUI per la configurazione.

In ogni caso, dovresti creare una specifica precisa per il formato JSON.

Si noti che JavaScript converte implicitamente i tipi. Questo è vero, ma non risolve il problema dei tipi sbagliati. Supponiamo che il tuo codice si aspetti che lo "spessore" sia un numero, ma l'utente fornisce la stringa "grassetto". Certo, JavaScript può implicitamente convertirlo in un valore numerico (NaN), ma quasi certamente non funzionerà nel modo previsto dall'utente. Quindi potrebbe essere meglio avvisare l'utente che l'input è in un formato sbagliato.

La conversione implicita funzionerà in alcuni casi molto specifici, ad es. se un numero è erroneamente quotato come stringa, può essere convertito in semplicità in un numero. Ma il contrario, dimenticando le virgolette attorno a una stringa, porterà quasi certamente a un errore di analisi.

    
risposta data 01.12.2017 - 08:27
fonte
0

Alcuni anni fa stavo lavorando a un problema simile; ma quello stava funzionando con l'input diretto dei dati, così che se ci fosse stata confusione, un messaggio di errore potrebbe chiedere un input diverso, offrire guide, ecc.

Per questo, dal momento che stai ricevendo i dati in un file, come suggerito dal tuo collega, prova a trovare modi per adattare automaticamente i dati per soddisfare le esigenze del programma.

Se ci sono situazioni che non possono essere risolte automaticamente, le informazioni sarebbero in grado di fornire, aiuterebbero il collega a capire la necessità di requisiti più chiari.

Mentre fai notare che l'utente può fornire i dati in un file, è possibile creare un'app di input dati che potrebbero utilizzare, in grado di assicurarsi che tutte le informazioni ricevute fossero valide?

    
risposta data 02.12.2017 - 05:16
fonte

Leggi altre domande sui tag