In definitiva è una chiamata di giudizio. Ad esempio, se i tuoi requisiti funzionali sono ancora in qualche modo un obiettivo mobile, allora il refactoring potrebbe essere una perdita di tempo - in seguito, requisiti nuovi o modificati potrebbero suggerire un'altra decomposizione funzionale completamente diversa. Questo è quello che di solito mi succede al primo taglio di ogni nuovo progetto di sviluppo.
Un approccio più equilibrato potrebbe essere quello di "pasticciare" con il tuo codice per un po ', finché non avrai una sensazione abbastanza buona per la "destinazione" finale del progetto. Quindi puoi pensare meglio al modo migliore per arrivare a quella destinazione. Naturalmente, a quel punto potresti avere un "pasticcio" di codice (molto più grande) da refactoring. Questa è la parte chiamata al giudizio.
Il refactoring dovrebbe esprimere meglio la funzionalità come astrazioni riutilizzabili, cioè come astrazioni intuitivamente sensibili che possono essere composte in modo ragionevolmente semplice per implementare la funzionalità desiderata. Quindi, quando la funzionalità è sufficientemente definita e sufficientemente stabile da permetterlo?
Se ti rifatti troppo presto, dovrai ricominciare da capo o potresti essere tentato di vivere con il tuo primo, subottimale sforzo di refactoring. Qualsiasi scelta è cattiva, o sfortunata. In alternativa, come già accennato, il refactoring troppo tardi comporta la manipolazione di un caos più grande.
Ho fatto entrambe le cose. In effetti, non puoi davvero averlo esattamente nel modo giusto (se esiste una cosa del genere). Dal momento che stai facendo la domanda, suppongo che tu non abbia molta esperienza in questo genere di cose. E in tal caso, immagino che forse dovresti "fare un po 'di casino" un po' di più. Il refactoring al primo momento in cui l'idea attraversa la tua mente è (suppongo) probabilmente troppo presto. 4000 righe di codice possono sembrare molto, ma in realtà non lo è.