Cuando se trabaja en idiomas que carecen de estructura incorporada y características de organización (por ejemplo, si no tiene espacios de nombres, paquetes, ensamblajes, etc.) o donde estos son insuficientes para mantener bajo control una base de código de ese tamaño, la respuesta natural es desarrollar nuestras propias estrategias para organizar el código.
Esta estrategia de organización probablemente incluye estándares relacionados con dónde se deben guardar los diferentes archivos, cosas que deben suceder antes / después de ciertos tipos de operaciones, y convenciones de nombres y otros estándares de codificación, así como mucho "así es como está configurado - ¡No te metas con eso! " escriba comentarios, que son válidos siempre que expliquen por qué.
Debido a que lo más probable es que la estrategia se adapte a las necesidades específicas del proyecto (personas, tecnologías, entorno, etc.) es difícil dar una solución única para la administración de bases de código grandes.
Por lo tanto, creo que el mejor consejo es adoptar la estrategia específica del proyecto y hacer que la gestión sea una prioridad clave: documentar la estructura, por qué es así, los procesos para realizar cambios, auditarla para asegurarse de que se cumpla, y crucial: cámbielo cuando necesite cambiar.
La mayoría de las veces estamos familiarizados con las clases y métodos de refactorización, pero con una gran base de código en dicho lenguaje, es la estrategia de organización en sí misma (completa con la documentación) la que necesita ser refactorizada cuando sea necesario.
El razonamiento es el mismo que para la refactorización: desarrollará un bloqueo mental para trabajar en pequeñas partes del sistema si siente que la organización general es un desastre y eventualmente permitirá que se deteriore (al menos esa es mi opinión sobre eso).
Las advertencias también son las mismas: use la prueba de regresión, asegúrese de que puede revertir fácilmente si la refactorización sale mal, y diseñe para facilitar la refactorización en primer lugar (¡o simplemente no lo hará!).
Estoy de acuerdo en que es mucho más complicado que refactorizar el código directo, y es más difícil validar / ocultar el tiempo de los gerentes / clientes que pueden no entender por qué debe hacerse, pero estos también son los tipos de proyectos más propensos a la descomposición del software causado por diseños inflexibles de alto nivel ...