Comment choisir entre garder un monolithe et le découper en petites fonctions?
#1
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 ?
Répondre
#2
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
Répondre
#3
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
Répondre
#4
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
Répondre
#5
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
Répondre
#6
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
Répondre
#7
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
Répondre


[-]
Réponse rapide
Message
Saisissez votre réponse à ce message ici.

Code de confirmation
Veuillez saisir le texte figurant dans l’image ci-dessous. Ce procédé permet de bloquer les robots.
Code de confirmation
(insensible à la casse)

Aller au forum