Dipende se il valore predefinito è il valore giusto o meno. Vedo quel modello troppo spesso quando sembra essere il modo più veloce per far funzionare un particolare caso d'uso. Rende solo più difficile il debug di altri casi d'uso in futuro.
Che cosa intendo per valore predefinito come valore corretto? Bene, prendi un campo intero, per esempio. Come dovrebbe essere predefinito? Se hai detto che non lo sai, dai un biscotto. Se hai detto zero, questa è la risposta giusta per, diciamo, "numero di voti positivi", ma non "secondi fino all'autodistruzione".
In altre parole, un valore predefinito corretto è specifico per il campo e può essere utilizzato in tutti i casi d'uso senza verificarlo. Se devo pepare il mio codice con if IntegerField == -1
, il valore predefinito non solo non mi sta comprando nulla che non potrei ottenere con null
, o ancora meglio un'opzione o un'eccezione, mi fa davvero male perché il controllo è più facile dimenticare e gli errori gravi sono più facili da ignorare. Perché rinunciare a utilizzare gli strumenti specificamente progettati per aiutare i programmatori in questa situazione?
Tuttavia, se posso semplicemente scrivere Upvotes += 1
senza preoccuparmi se quel campo è già stato utilizzato in precedenza, e sapere che produrrà il risultato corretto a causa di un valore predefinito zero, allora il valore predefinito mi sta comprando qualcosa di utile.
Il problema con la classe SafeReader
che descrivi è che si tratta di ipotesi su campi di cui non sa nulla. Posso pensare a casi d'uso in cui potrebbe essere utile includere i valori predefiniti per i campi che non sono in una query, ma tutti implicano qualche altra forma di convalida dei nomi dei campi, ad esempio rispetto a uno schema.
Personalmente considero qualsiasi cosa chiamata SafeWhatever
un odore di codice. Il nome mi sembra un po 'orwelliano, perché la sicurezza è quasi sempre un'illusione. È come abbattere i guard rail in modo che una strada non sia così pericolosa.