Note de lecture : Refactoring, Improving the design of existing code 2nd edt., par Martin Fowler with Kent Beck

Note : 8 ; Petit dépoussiérage d’un sujet toujours aussi important !

Pas moins de 20 ans ont séparé les deux éditions de cet ouvrage ! Le refactoring, c’est un peu la clé à molette de l’architecture émergente. Et ce livre en est le manuel officiel. Autant dire que c’est un ouvrage majeur du monde agile en général et du craftsmanship en particulier.

Cette seconde édition semble moins imposante que la première. En fait, elle compte approximativement le même nombre de pages, à savoir un peu plus de 400 hors annexes. Question de papier… Petite nouveauté toutefois : il existe une version en ligne qui est la version de référence et qui inclut la totalité des refactorings. La version papier en est donc un sous-ensemble. Toutefois l’ouvrage contient le code d’activation de cette version en ligne qui n’est pas en libre accès ! Autre petite différence, l’impression en 4 couleurs, privilège accordé à un grand classique, j’imagine…

Le livre totalise 12 chapitres, dont les 6 derniers constituent le catalogue à proprement parler. Autant prévenir tout de suite, les exemples sont en JavaScript, ce qui est franchement une mauvaise nouvelle pour moi. L’auteur nous a promis des exemples sans idiomes spécifiques, ce qui est vrai à quelques exceptions près.
Le premier chapitre est un teasing du livre, un exemple. Il met en œuvre des refactorings successifs en identifiant à chaque étape les « smells » résiduels. Il le fait avec la pédagogie à laquelle il nous a habitué. Et il est vrai que le JavaScript ne gêne guère. Un plaisir. On rentre dans le dur au chapitre 2, avec 35 pages consacrés aux principes du refactoring. On y explique quoi, quand et surtout pourquoi refactorer. La pratique y est inscrite au sein des pratiques d’XP et surtout comme partie intégrante du design émergent. J’y retrouve tout ce qui m’avait emballé il y a un peu plus de 20 ans. Cela avait été une révélation pour moi, avant même que je découvre l’agilité. Ne ratez pas ce chapitre.

Le chapitre 3 prépare le terrain pour le catalogue : celui-ci est exclusivement dédié aux « bad smells ». C’est assez court, avec une quinzaine de pages. Mais celles-ci sont efficacement exploitées, avec une courte mais claire description des odeurs associées à des renvois vers les refactorings dédiés. Une quinzaine de pages aussi pour s’approprier la manière dont les tests unitaires vont sécuriser le JavaScript. Le code est un petit peu plus rugueux à lire quand on est une bille comme moi en JavaScript… Les 3 pages duc chapitre 5 qui servent de préambule au catalogue concluent cette partie introductive.

Place au catalogue lui-même au chapitre 6. Ce sont une douzaine de refactorings qui sont présentés dans ce « first set » qui couvre 55 pages. Il n’y a pas de thématique précise ici, si ce n’est qu’il s’agit beaucoup de mécaniques de base. On y retrouve le super-classique Extract Function, mais aussi quelques autres moins usités. On notera la juxtaposition fréquente de patterns allant en sens inverse du précédent. Il n’y a pas qu’une seule direction. Le choix d’un pattern est affaire de contexte. Le chapitre 7 a lui bel et bien une thématique : il couvre l’encapsulation. Près d’une douzaine de refactorings également ici, mais cette fois sur 35 pages. On y retrouve aussi quelques grands classiques comme Extract Class et Replace Temp with Query.

Les 40 pages du chapitre 8 sont dédié au « moving features », où comment remettre des parties des codes à l’endroit où elles amélioreront la cohésion et le découplage. On y trouve le couteau suisse « move function » mais on y découvre aussi des nouveaux venus tel que Replace Loop with Pipeline. Les 25 pages du chapitres 9 ne contient que 5 refactorings sur le thème « Organizing Data », c’est moins d’un tiers de ce que comptait la première édition ! Pour tout dire, les refactorings de ce chapitre ne sont pas particulièrement marquants.

C’est de la simplification de la logique conditionnelle dont il est question au chapitre 10. Ses 8 refactorings d’étendent sur 45 pages et sont véritablement cruciaux pour améliorer la lisibilité du code. Decompose Conditional en est un très bel exemple, tandis que Replace Conditional with Polymorphism est une des pierres angulaires de l’approche objet. Refactoring APIs marque au chapitre 11 un changement de focus du chapitre que s’appelait avant « Making Method Calls Simpler ». L’intention est mieux exprimée dans cette nouvelle édition, et plus dans l’air du temps également. La plupart des refactorings de ce chapitre sont des classiques à ne pas rater.

L’ouvrage se referme sur le chapitre 12 « Dealing with inheritance ». Les vieux forçats de la programmation objet reconnaitront les gestes qu’ils utilisent au quotidien. Les plus jeunes peuvent en prendre de la graine. 4 chapitres de l’édition précédente sont passés à la trappe. En pratique il s’agissait de ceux contribués par d’autres auteurs. Il s’agit du big refactoring, de la réutilisation et de l’outillage. De fait, ces sujets ne sont pas indispensables ici et l’auteur a préféré consacrer plus de place aux refactorings eux-mêmes.

L’ouvrage reste excellent. De mon point de vue, il n’a pas fondamentalement changé, à part le changement de langage qui constitue le fait le plus marquant. L’ouvrage original a été pour moi à l’époque une véritable révélation que je ne retrouve évidemment plus ici. C’est une honnête mise à jour, mais c’est vrai que 20 ans après, j’en attendais plus.

Refactoring, Improving the design of existing code 2nd edt., par Martin Fowler with Kent Beck

Référence complète : Refactoring, Improving the design of existing code, 2nd edt. – Martin Fowler with Kent Beck – Addison Wesley 2019 – ISBN : 978 0 13 475759 9

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.