Quando si lavora in lingue prive della struttura incorporata e delle funzionalità dell'organizzazione (ad esempio se non ha spazi dei nomi, pacchetti, assiemi, ecc.) o dove questi non sono sufficienti per mantenere sotto controllo una base di codice di quella dimensione, la risposta naturale è quello di sviluppare le nostre strategie per organizzare il codice.
Questa strategia organizzativa include probabilmente standard relativi a dove conservare diversi file, cose che devono accadere prima / dopo determinati tipi di operazioni, convenzioni di denominazione e altri standard di codifica, oltre a un sacco di "questo è come è impostato - non scherzare! " scrivi commenti - che sono validi purché spieghino perché!
Dato che molto probabilmente la strategia finirà per essere adattata alle esigenze specifiche del progetto (persone, tecnologie, ambiente, ecc ...) è difficile dare una soluzione valida per tutti alla gestione di grandi dimensioni basi di codice.
Pertanto ritengo che il miglior consiglio sia quello di abbracciare la strategia specifica del progetto e farne una priorità fondamentale gestirla: documentare la struttura, perché è così, i processi per apportare modifiche, controllarlo per assicurarsi che sia in corso aderito, e in modo cruciale: cambialo quando deve cambiare.
Abbiamo familiarità con le classi e i metodi di refactoring, ma con una grande base di codici in tale linguaggio è la stessa strategia organizzativa (completa di documentazione) che deve essere sottoposta a refactoring se e quando necessario.
Il ragionamento è lo stesso del refactoring: svilupperai un blocco mentale verso il lavoro su piccole parti del sistema se ritieni che l'organizzazione complessiva di esso sia un disastro, e alla fine lo permetta di deteriorarsi (almeno questo è la mia opinione su di esso).
Anche gli avvertimenti sono gli stessi: usa i test di regressione, assicurati di poter facilmente annullare se il refactoring va male, e progetta in modo da facilitare il refactoring in primo luogo (o semplicemente non lo farai!).
Sono d'accordo sul fatto che è molto più complicato del refactoring del codice diretto, ed è più difficile convalidare / nascondere il tempo da manager / clienti che potrebbero non capire perché deve essere fatto, ma questi sono anche i tipi di progetto più inclini al software rot causato da progetti di primo livello inflessibili ...