Questa è intesa come una domanda indipendente dalla lingua generale. È scritto intorno a un esempio strano semplicemente perché non sono riuscito a trovare un modo migliore per chiedere. Inoltre, gli "pseudocod" forniti sembrano un misto di Java e JavaScript solo perché sono le lingue con cui ho più familiarità, ma speriamo che siano facili da capire per tutti.
Diciamo che ho un campo String
chiamato tuples
in un database. Quando l'utente fa clic su un pulsante (il pulsante Store Numbers ), viene eseguita la funzione store_numbers
, come segue (in pseudocodice):
function store_numbers() {
// Make a bunch of calculations and generate some integer tuples,
// such as (0,1), (4,4) and (-500,0)
// Create a string with those tuples, semicolon-separated,
// with the exact format above, such as
// "(0,1);(4,4);(-500,0)"
// Insert this string in the 'tuples' field of the database (for the given UserID)
}
E questo è l'unico modo, nell'intero software, di modificare il campo tuples
del database (almeno nella versione attuale del software).
Ora diciamo che lo stesso utente ritorna domani e fa clic su un altro pulsante (il pulsante Calcola elementi ) e viene eseguita la funzione calculate_stuff
. Questa funzione leggerà la stringa tuples
dal database e dovrebbe eseguire vari calcoli con le tuple. DOMANDA : posso supporre che la stringa tuples
sia formattata perfettamente? O dovrei prima convalidare la stringa proveniente dal database?
OPZIONE 1: Supponendo che sia perfettamente formattato:
function calculate_stuff() {
String tuples = // read string from database...
// immediately begin calculations assuming string is perfect
for (String tuple in tuples.split(';')) {
String[] temp = tuple.replace('(','').replace(')','').split(',');
int x = Math.parseInt(temp[0]);
int y = Math.parseInt(temp[1]);
// ...
}
// ...
// If somehow the string was wrong, ugly errors will be thrown,
// and the software will crash.
// But this shouldn't happen, since the string was crafted
// correctly in the store_numbers() function.
}
OPZIONE 2: Convalida prima:
function calculate_stuff() {
String tuples = // read string from database...
// Check if the string is OK first:
if (!is_a_semicolon_separated_list_of_integer_tuples(tuples)) {
error("Oh no! Something terrible happened! How come??");
} else {
// Proceed calculations...
}
}
I MIEI PENSIERI: l'opzione 1 non darà alcun messaggio di errore decente all'utente - il software si bloccherà invece. Questo è terrificante in una prospettiva UX, ma poiché la stringa è stata creata correttamente dall'altra funzione, questo non dovrebbe mai accadere . D'altra parte, forse non fa male aggiungere l'assegno? Bene ... Codificare il is_a_semicolon_separated_list_of_integer_tuples
non è così difficile , ma neanche ridicolmente facile. E se fosse una stringa molto più complicata, la cui convalida richiederebbe centinaia di righe di codice ?? Per qualcosa che non accadrà mai?
Quali sono le linee guida per questo? Quali sono le buone pratiche di programmazione in questione?