Il tipico metodo di progettazione della programmazione che ho scelto è il seguente:
1. ID the problem and what's required
2. Make your program do something simple
3. Test it
4. Make your program do a little bit more
5. Repeat 2 until all the micro problems are solved by the program as a whole
Fondamentalmente, design incrementale. Quindi, tutti i pezzi possono essere suddivisi e ogni micro problema è risolto da una funzione di micro-problema; fa un ottimo lavoro con la coesione e riduce l'accoppiamento.
Poi, a volte in futuro, il programma si imbatte in un problema che è proprio come il problema su cui è costruito, ma richiede un piccolo extra. Quindi, direi aggiungere la funzionalità al programma, per compensare. Se, quando aggiungi questa funzionalità, la logica di lavoro già stabilita deve essere modificata per far funzionare la nuova funzionalità, all'improvviso sembra che tu stia scherzando con qualcosa che non dovresti.
Quindi, esiste un metodo di progettazione in cui ogni programma sviluppato con esso può essere aggiunto senza compromettere la logica di lavoro?
Esempio:
word = yes,no,"maybe,so"
oldCSVSplit(word, ",") -> {"yes", "no", "\"maybe", "so\""}
newCSVSplit(word, ",") -> {"yes", "no", "maybe,so"};
La funzione oldCSVSplit fa quello che dovrebbe, divisa in ",". Quindi, a volte in futuro, le virgole tra virgolette devono essere ignorate per ottenere correttamente le voci. L'aggiunta della funzionalità per ignorare le virgolette singole / doppie altererebbe gravemente la logica, con più if e assegni e persino uno stack per tenere traccia delle virgolette iniziali. È possibile evitare uno scenario del genere? Quale metodo può rendere tali aggiunte indolori e meno compromettenti per la logica di lavoro?