Sono spesso in una situazione in cui devo progettare e codificare un processo / algoritmo e ci sono diverse varianti su quell'algoritmo. Ad esempio, sto attualmente scrivendo un codice di sincronizzazione di database che ha metodi per il download e il caricamento. Questi metodi sono simili, ma non identici.
Dopo aver scritto il codice e averlo fatto funzionare, ora lo refactoring per rimuovere la ripetizione.
Non sono così male a scrivere classi che contengono principalmente dati, in quei casi trovo più facile all'inizio applicare la modellazione entità-relazione, suddividere i dati in classi, e posso abbastanza rapidamente vedere elementi comuni che possono essere inserito in classi base / astratte.
Ma trovo più difficile con algoritmi / processi.
Le mie domande sono: è meglio impiegare più tempo per progettarlo in anticipo, evitando così la necessità di refactoring? E, in tal caso, come fai a essere bravo a fare questo?
Trovo che quando progetto in anticipo, perché non c'è modo di testare il design, spesso divento molto tangente e non appena inizio a scrivere il codice il disegno viene scartato. Al contrario, con lo sviluppo incrementale, puoi regolarmente testare il tuo codice per assicurarti che funzioni. Ma lo svantaggio del modo in cui faccio lo sviluppo incrementale, è il tempo extra dedicato al refactoring alla fine in modo che scrivo il codice "DRY".