Lorsque vous travaillez dans des langages qui manquent de structure intégrée et de fonctionnalités d'organisation (par exemple, s'il n'a pas d'espaces de noms, de packages, d'assemblages, etc.) ou lorsque ceux-ci sont insuffisants pour garder une base de code de cette taille sous contrôle, la réponse naturelle est de développer nos propres stratégies pour organiser le code.
Cette stratégie d'organisation comprend probablement des normes relatives à l'emplacement où les différents fichiers doivent être conservés, les choses qui doivent se produire avant / après certains types d'opérations, et les conventions de dénomination et autres normes de codage, ainsi que beaucoup de "c'est ainsi qu'il est configuré - ne plaisante pas avec ça! " tapez des commentaires - qui sont valables tant qu'ils expliquent pourquoi!
Parce que la stratégie finira très probablement par être adaptée aux besoins spécifiques du projet (personnes, technologies, environnement, etc.), il est difficile de donner une solution universelle pour gérer de grandes bases de code.
Par conséquent, je crois que le meilleur conseil est d'adopter la stratégie spécifique au projet et de faire de sa gestion une priorité clé: documenter la structure, pourquoi c'est ainsi, les processus pour apporter des changements, l'auditer pour s'assurer qu'elle est respectée, et surtout: changez-le quand il a besoin de changer.
Nous sommes surtout familiers avec les classes et méthodes de refactorisation, mais avec une grande base de code dans un tel langage, c'est la stratégie d'organisation elle-même (avec documentation) qui doit être refactorisée au fur et à mesure des besoins.
Le raisonnement est le même que pour la refactorisation: vous développerez un blocage mental pour travailler sur de petites parties du système si vous sentez que l'organisation globale de celui-ci est un gâchis, et finira par lui permettre de se détériorer (du moins c'est mon point de vue sur il).
Les mises en garde sont également les mêmes: utilisez des tests de régression, assurez-vous que vous pouvez facilement revenir en arrière si le refactoring va mal, et concevez de manière à faciliter le refactoring en premier lieu (ou vous ne le ferez tout simplement pas!).
Je suis d'accord que c'est beaucoup plus délicat que de refactoriser le code direct, et il est plus difficile de valider / cacher le temps aux gestionnaires / clients qui pourraient ne pas comprendre pourquoi cela doit être fait, mais ce sont également les types de projets les plus sujets à la pourriture de logiciels causés par des conceptions de haut niveau inflexibles ...