PHP Refactoring

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 clase MarkdownToLinkedinConverter. Esto eliminó la duplicación de esta funcionalidad en el servicio LinkedinService. 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 clase TenantManager. Esto eliminó la duplicación de esta funcionalidad en AccountDeletionService y BusinessTenantDissolutionService. Ahora, la eliminación del esquema de un inquilino se realiza de forma centralizada.

  • ReferralService: Se unificaron las funciones calculateCommission() y calculateCommissionForStripe() en una única función privada llamada createCommission(). 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 AiTokenUsageService al ProjectDescriptionService para garantizar la coherencia en las funciones canGenerate() y recordUsage(). 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.

Refactorización para la Coherencia y Mantenibilidad en Múltiples Servicios
Gerardo Ruiz

Gerardo Ruiz

Author

Share: