Refactorización para la Coherencia y Mantenibilidad en Múltiples Servicios
Este post describe una refactorización en el proyecto devlog-ist/landing destinada a eliminar la duplicación de código y mejorar la coherencia en el manejo de tokens y otras funcionalidades clave a través de diferentes servicios.
El Problema
La duplicación de código no solo infla la base de código, sino que también aumenta el riesgo de errores y la dificultad de mantenimiento. Cuando la misma lógica se implementa en varios lugares, cualquier cambio o corrección debe aplicarse repetidamente, lo que consume tiempo y aumenta la posibilidad de inconsistencias. En este proyecto, se identificaron varias áreas donde la duplicación de código era evidente, afectando la eficiencia y la fiabilidad.
La Solución
Para abordar este problema, se implementó una serie de refactorizaciones estratégicas. El objetivo principal fue extraer la lógica común en componentes reutilizables, lo que resultó en un código más limpio, mantenible y coherente.
Eliminación de Duplicación de Código
-
MarkdownToLinkedinConverter: Se extrajo la función
toBold()a un método público estático en la claseMarkdownToLinkedinConverter. Esto eliminó la duplicación de esta funcionalidad en el servicioLinkedinService. Un ejemplo de uso sería:class MarkdownToLinkedinConverter { public static function toBold(string $text): string { return "<b>" . $text . "</b>"; } } -
TenantManager: La función
dropTenantSchema()se movió a la claseTenantManager. Esto eliminó la duplicación de esta funcionalidad enAccountDeletionServiceyBusinessTenantDissolutionService. Ahora, la eliminación del esquema de un inquilino se realiza de forma centralizada. -
ReferralService: Se unificaron las funciones
calculateCommission()ycalculateCommissionForStripe()en una única función privada llamadacreateCommission(). Esto simplificó el código y garantizó una lógica de cálculo de comisiones consistente. -
DetectsUniqueConstraintViolation: Se extrajo la lógica para detectar violaciones de restricción única en una trait llamada
DetectsUniqueConstraintViolation. Esta trait es utilizada por ambos coordinadores de publicación, lo que garantiza una gestión de errores consistente. -
AiTokenUsageService: Se añadió el servicio
AiTokenUsageServicealProjectDescriptionServicepara garantizar la coherencia en las funcionescanGenerate()yrecordUsage(). Esto centraliza la gestión del uso de tokens de IA.
Beneficios
- Reducción de la duplicación de código: Se eliminó la redundancia, lo que facilitó el mantenimiento y la actualización del código.
- Mayor coherencia: Se garantizó que la misma lógica se aplicara de manera consistente en todos los servicios.
- Mejor mantenibilidad: El código se volvió más fácil de entender, modificar y probar.
- Menor riesgo de errores: Al centralizar la lógica, se redujo la posibilidad de introducir errores al realizar cambios.
Conclusión
La refactorización implementada mejoró significativamente la calidad del código en el proyecto devlog-ist/landing. Al eliminar la duplicación de código y centralizar la lógica común, se logró un código más coherente, mantenible y fiable. La lección clave es que la refactorización continua es esencial para mantener una base de código saludable y eficiente.