Sono un grande sostenitore della progettazione del problema in questione e non soffiare il tuo progetto cercando di indovinare tutti i casi che devi soddisfare perché "un giorno potremmo averne bisogno".
Fondamentalmente, dato un elenco di requisiti specifici, design contro questo, tuttavia, questo non significa che non dovresti:
- rendere gli aspetti del tuo design configurabili anziché codificare in modo rigido quegli aspetti della soluzione. O tramite i parametri passati in runtime o tramite una lettura di configurazione esterna all'avvio (o dopo HUP'ing).
- allaccia il tuo codice con numeri magici,
- evitare di dare un'occhiata per vedere se c'è qualcosa già scritto che è possibile riutilizzare, magari dopo aver adattato la soluzione esistente per fornire un approccio adatto alla situazione esistente e ai nuovi requisiti.
Il problema principale con la progettazione di "possibili futuri" è che stai sempre solo indovinando. Forse facendo ipotesi plausibili, ma "quando arriva il momento critico" è solo una serie di ipotesi.
In questo modo hai anche la reale possibilità di spremere la tua soluzione per adattarla ai casi generali piuttosto che risolvere il problema specifico in questione come definito dai tuoi requisiti noti.
Che cosa sta dicendo? "Quando tutto ciò che hai è un martello, tutto inizia a sembrare un chiodo".
Vorrei avere una sterlina per ogni volta che ho sentito qualcuno dire "Ma è una soluzione più adattabile per quei casi generali che potremmo vedere in futuro."