Salut tout le monde. Je suis en train de refactoriser un vieux module de traitement de données et je me retrouve avec un choix un peu bête : est-ce que je garde cette fonction utilitaire monolithique de 300 lignes qui fait tout et que tout le monde a peur de toucher, ou est-ce que je la découpe en une dizaine de petites fonctions hyper spécialisées ? D’un côté, la version actuelle est moche mais elle marche, et la modifier va demander de retoucher tous les tests d’intégration existants. De l’autre, je sens que la maintenabilité à long terme en prendrait un coup si je laisse ce monstre en l’état. J’ai l’impression que peu importe ce que je choisis, je vais le regretter dans six mois. Quelqu’un a déjà été bloqué sur ce genre de dilemme de refactoring ?
|
Comment choisir entre garder un monolithe et le découper en petites fonctions?
|
|
Pour moi le dilemme se résout mieux par une micro stratégie de refactorisation en découpant le monolithique en petites fonctions hyper spécialisées puis en testant par étape Cela réduit le risque et rend les tests plus ciblés même si cela demande du temps au départ Tu pourrais commencer par isoler deux blocs clairement séparables et mesurer l impact sur les tests avant et après Tu as déjà envisagé une approche incrémentale
Je comprends l angoisse personne n aime toucher un truc qui fonctionne Mais j ai vu des modules qui gagnent en clarté et en maintenance après une refactorisation progressive On peut faire une extraction par couche écrire des tests autour des interfaces publiques et laisser le reste en place tant que ca passe Oui c est lent au démarrage mais c est souvent le seul moyen d éviter les surprises dans six mois
Et si on reformule le problème on ne parle plus juste garder ou couper mais quelles interfaces veulent on stables et quels blocs doivent pouvoir évoluer sans tout casser introduire une façade autour du cœur peut permettre d avancer sans bouleverser les tests existants puis on peut évoluer par petites touches dans le cadre de la refactorisation
Ca peut vite devenir une soupe de tests si on ne choisit pas les coupes judicieusement Le plus dur c est de trouver le point de découpe qui permet de gagner en lisibilité sans changer l API Une approche prudente oui et j irais peut etre vérifier les metriques avant et apres
Les attentes des lecteurs et les habitudes liées au genre du code influencent fortement le choix Certains aiment des modules courts et explicites d autres tolèrent des blocs plus longs tant que tout marche En référençant la refactorisation on peut documenter les raisons et les hypothèses sans imposer une méthode unique et voir comment l équipe réagit à chaque itération
Plan pragmatique pour avancer sans tout bouleverser Cartographier les dependances et les chemins les plus couteux a changer Ecrire des tests d interface pour couvrir le comportement public Extraire une fonction focalisee puis aligner les tests Refaire le tour Une fois la coupe choisie on peut iterer Si tu es prudent tu peux aussi activer le mode refactorisation dans CI Ce choix sera peut etre remis en cause par les retours six mois plus tard mais on a la preuve empirique
|
|
« Sujet précédent | Sujet suivant »
|

