Te daré nuestra experiencia refactorizando LedgerSMB. Tomamos la decisión de hacer las cosas de manera diferente desde el principio y todavía estamos haciendo exactamente lo que usted describe, pero sin muchos métodos de pegamento (tenemos algunos métodos de pegamento por cierto, pero no muchos).
La vida con dos bases de código
LedgerSMB ha sobrevivido con dos bases de código durante aproximadamente 5 años y pasarán varias más antes de que se elimine la antigua base de código. La antigua base de código es un verdadero horror para la vista. Mal diseño de base de datos, Perl construye como IS->some_func(\%$some_object);
junto con el código que muestra exactamente por qué a veces se usa la metáfora del espagueti (rutas de ejecución que serpentean entre módulos y hacia atrás, y entre idiomas, sin rima ni razón). La nueva base de código evita esto moviendo las consultas db a los procedimientos almacenados, teniendo un marco más limpio para el manejo de solicitudes y mucho más.
Lo primero que decidimos hacer fue tratar de refactorizar módulo por módulo. Esto significa mover toda la funcionalidad de un área específica a un nuevo módulo y luego conectar el código antiguo al nuevo módulo. Si la nueva API está limpia, esto no es gran cosa. Si la nueva API no es complicada, es una invitación a trabajar un poco más en la nueva API ...
Lo segundo es que hay muchas ocasiones en que el nuevo código tiene que acceder a la lógica en el código anterior. Esto debe evitarse en la medida de lo posible porque conduce a métodos de pegamento que son feos pero que no siempre se puede evitar. En este caso, los métodos de pegamento deben minimizarse y evitarse en la medida de lo posible, pero deben usarse cuando sea necesario.
Para que esto funcione, debe comprometerse a reescribir toda la funcionalidad en un área específica. Si puede, por ejemplo, reescribir todo el código de seguimiento de la información del cliente a la vez, eso significa que no es difícil trabajar con el código que llama desde el código anterior, y se minimiza el envío al código antiguo desde el nuevo código.
Lo segundo es que si tienes abstracciones razonables en tu lugar, deberías poder elegir a qué nivel de API llamar y cómo mantenerlo limpio. Sin embargo, debería pensar en reescribir las partes que están llamando a su API para que también estén un poco más limpias.
Hay muchas áreas de herramientas comerciales que son irreductiblemente complejas. No puedes deshacerte de toda la complejidad. Pero puede administrarlo centrándose en API limpias que hacen específicamente lo que necesita hacer, y módulos que utilizan esa API de manera constructiva. El pegamento debería ser el último recurso solo después de considerar que reescribir el resto del código de llamada puede ser más rápido.