Prima un po 'di background. Sto codificando una ricerca da Età -> Valuta. Esistono 7 parentesi per età, quindi la tabella di ricerca è di 3 colonne (da | a | tasso) con 7 righe. I valori cambiano raramente: sono tassi legiferati (prima e terza colonna) che sono rimasti gli stessi per 3 anni. Ho pensato che il modo più semplice per archiviare questa tabella senza codificarla sia nel database in una tabella di configurazione globale, come un singolo valore di testo contenente un CSV (quindi "65,69,0,05,70,74,0,06" è come i livelli 65-69 e 70-74 verrebbero memorizzati). Relativamente facile da analizzare quindi utilizzare.
Quindi mi sono reso conto che per implementare questo avrei dovuto creare una nuova tabella, un repository per avvolgerlo, test a livello di dati per il repository, test unitari attorno al codice che non appiattisce il CSV nella tabella e test attorno alla ricerca stessa. L'unico vantaggio di tutto questo lavoro è evitare la codifica forzata della tabella di ricerca.
Quando si parla con gli utenti (che attualmente utilizzano direttamente la tabella di ricerca - guardando una copia cartacea) l'opinione è praticamente che "le tariffe non cambiano mai". Ovviamente ciò non è corretto - le tariffe sono state create solo tre anni fa e in passato le cose che "non cambiano mai" hanno avuto l'abitudine di cambiare - quindi per me per programmare in modo difensivo questo non dovrei assolutamente archiviare la tabella di ricerca in l'applicazione.
Tranne quando penso a YAGNI . La funzione che sto implementando non specifica che le tariffe cambieranno. Se le tariffe cambiano, cambieranno ancora così raramente che la manutenzione non è nemmeno una considerazione e la funzionalità non è in realtà abbastanza critica da compromettere qualsiasi cosa se ci fosse un ritardo tra la variazione della tariffa e l'applicazione aggiornata.
Ho praticamente deciso che nulla di valore andrà perso se codifico la ricerca e non sono troppo preoccupato per il mio approccio a questa particolare funzionalità. La mia domanda è: come professionista ho debitamente giustificato questa decisione? I valori di codifica rigida sono una cattiva progettazione, ma andare alla difficoltà di rimuovere i valori dall'applicazione sembra violare il principio YAGNI.
MODIFICA Per chiarire la domanda, non sono preoccupato per l'implementazione effettiva. Sono preoccupato di poter fare una cosa brutta e rapida e giustificarla dicendo YAGNI, oppure posso adottare un approccio più difensivo e ad alto sforzo, che anche nel migliore dei casi alla fine ha bassi benefici. Come programmatore professionista, la mia decisione di implementare un progetto che so essere difettoso dipende semplicemente da un'analisi costi / benefici?
EDIT Mentre tutte le risposte sono state molto interessanti poiché penso che ciò dipenda dalle scelte progettuali di un individuo, penso che le risposte migliori siano state quelle di @ Corbin e di @EZ Hart in quanto hanno sollevato cose che non avevo considerato nella domanda:
- la falsa dicotomia di "rimuovere correttamente i valori codificati" spostandola nel database e "applicare YAGNI in modo efficiente" utilizzando la codifica hardware. C'era una terza opzione di mettere la tabella di ricerca nella configurazione dell'app, che non comporta il sovraccarico del modo corretto e senza l'efficienza di YAGNI. Generalmente non siamo limitati a nessuna / o decisione, e quindi si riduce a una decisione costi / benefici.
- la generazione di codice può ridurre il sovraccarico di spostare i valori codificati nel database e in un modo che rimuove anche la mia decisione troppo ingegnerizzata di elaborare un CSV nella tabella. Potenzialmente questo aggiunge anche un problema di manutenzione a lungo termine con il codice generato se i requisiti di base cambiano per il metodo di ricerca. Tutto ciò influisce solo sull'analisi costi / benefici, ed è probabile che se avessi avuto quell'automazione disponibile non avrei nemmeno considerato l'hard-coding di qualcosa del genere.
Sto contrassegnando la risposta di @ Corbin come corretta perché cambia le mie ipotesi sui costi di sviluppo e probabilmente aggiungerò alcuni strumenti di generazione del codice al mio arsenale nel prossimo futuro.