Renommer une association, un attribute ou encore une méthode mène le développeur à devoir mettre à jour tout le code, mais cette tâche est difficile et dangereuse en cas d’oublis (erreurs 500).
Je travail actuellement sur la migration et le découpage d’une application monolithe, et la première étape consiste à extraire une partie du code commune à toute l’application. Cette partie contient des modèles avec associations renommé comme ceci:
(Les modèles sont préfixés avec Right
mais les associations sont renommées pour raccourcir leurs noms).
Cette technique est néfaste pour l’application lorsqu’elle grandie et se complexifie, car elle mène à ce genre de résultat:
Le modèle RightLevel
est comme ceci:
Et maintenant à l’utilisation nous avons ceci:
Nous nous retrouvons avec level.level
qui n’a aucun sens.
Renommer sans stress
Pour corriger ce problème, j’ai renommé toutes les associations similaires à ce cas, mais il faut maintenant adapter le code pour éviter les erreurs.
Une technique simple et efficace, utilisé d’ailleurs par les développeurs de Rails, est d’utiliser les DEPRECATION WARNINGS
.
Cela consiste a avoir 2 méthodes, l’ancienne déprécié et la nouvelle à utiliser à la place, et lorsque l’ancienne est appelé, un message est envoyé par warn
puis d’appeler la nouvelle méthode.
Vous pouvez utiliser la méthode de Rails disponible dans le framework, mais cette dernière indique que la méthode sera retiré du framework Rails, or ici il s’agit d’une méthode/association de notre application.
C’est pourquoi j’ai implémentés ma propre méthode donnant un résultat très proche de celui de Rails:
Maintenant la méthode deprecate
est disponible dans tous vos modèles et je l’ai donc ajouté comme ceci dans mes modèles:
Maintenant les deux noms sont disponibles :levels
et :right_levels
mais avec un message DEPRECATION WARNING
si :levels
est utilisé.
Conclusion
Nous oublions parfois les méthodes les plus simples qui permettent d’améliorer le code sans impacter le coût pour l’entreprise.
Grâce à ces messages, nous allons pouvoir renommer au fur et à mesure, avec les gens de mon équipe, les différents emplacements où l’ancien nom est utilisé.