Ti darò la nostra esperienza di refactoring LedgerSMB. Abbiamo preso la decisione di fare le cose in modo diverso all'inizio e stiamo ancora facendo esattamente quello che descrivi, ma senza molti metodi di colla (abbiamo alcuni metodi di colla tra l'altro, ma non molto).
La vita con due basi di codice
LedgerSMB è sopravvissuto con due codebase per circa 5 anni e saranno molti di più prima che la vecchia base di codice venga eliminata. La vecchia base di codice è un vero orrore da vedere. Cattivo design db, Perl costruisce come IS->some_func(\%$some_object);
insieme al codice che mostra esattamente perché a volte viene usata la metafora degli spaghetti (percorsi di esecuzione che si snodano tra i moduli e il retro e tra le lingue, senza rima o ragione). La nuova base di codice evita ciò spostando le query db in stored procedure, disponendo di un framework più pulito per la gestione delle richieste e molto altro.
La prima cosa che abbiamo deciso di fare è stata quella di provare a refactoring modulo per modulo. Ciò significa spostare tutte le funzionalità in un'area specifica in un nuovo modulo e quindi collegare il vecchio codice nel nuovo modulo. Se la nuova API è pulita, questo non è un grosso problema. Se la nuova API non è cose, diventa peloso e questo è un invito a lavorare un po 'più duramente nella nuova API ....
La seconda cosa è che ci sono molte volte in cui il nuovo codice deve accedere alla logica nel vecchio codice. Questo deve essere evitato nella misura del possibile perché porta a metodi di colla che sono brutti ma non si può sempre evitarlo. In questo caso i metodi di colla dovrebbero essere minimizzati ed evitati nella misura del possibile ma usati quando necessario.
Per fare questo devi impegnarti a riscrivere tutte le funzionalità in un'area specifica. Se è possibile, ad esempio, riscrivere contemporaneamente tutto il codice di tracciamento delle informazioni sui clienti, ciò significa che il codice che lo chiama dal vecchio codice non è difficile da lavorare e che la spedizione al vecchio codice dal nuovo codice è ridotta al minimo.
La seconda cosa è che se hai delle astrazioni ragionevoli al tuo posto, dovresti essere in grado di scegliere quale livello dell'API chiamare e come mantenerlo pulito. Tuttavia, dovresti pensare di riscrivere le parti che chiamano l'API in modo che siano anche un po 'più pulite.
Esistono molte aree di strumenti aziendali irriducibilmente complesse. Non puoi liberarti di tutta la complessità. Ma puoi gestirlo concentrandoti su API pulite che fanno specificamente ciò che devi fare e su moduli che utilizzano tale API in modo costruttivo. La colla dovrebbe essere l'ultima risorsa solo dopo aver considerato che riscrivere il resto del codice chiamante potrebbe essere più veloce.