Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

DRY (« Don’t Repeat Yourself ») ne signifie pas qu’il faut éliminer chaque répétition de lignes. Le principe vise plutôt à donner une représentation unique et faisant autorité à chaque élément de connaissance ou d’intention dans un système. Quand une même règle doit être modifiée à plusieurs endroits, des copies peuvent diverger; quand deux blocs se ressemblent mais expriment des règles différentes, les fusionner peut au contraire rendre le code moins clair.

Ce que DRY cherche réellement à éviter

Dans The Pragmatic Programmer, David Thomas et Andrew Hunt résument le principe ainsi : « Every piece of knowledge must have a single, unambiguous, authoritative representation within a system. » Ils précisent que DRY porte sur la duplication de connaissance et d’intention, et non uniquement sur des lignes de code répétées. Lire l’extrait officiel consacré à DRY.

La connaissance peut être exprimée sous différentes formes. Une règle de validation peut apparaître dans plusieurs fonctions; une contrainte peut être reproduite dans le code et la documentation; un schéma de base de données peut décrire une structure que d’autres éléments du système reflètent. Même si ces représentations ne se ressemblent pas textuellement, elles peuvent exprimer la même chose.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

DRY veut-il dire qu’il ne faut jamais répéter du code?

Non. Deux blocs identiques ne constituent pas nécessairement une duplication de connaissance : ils peuvent aujourd’hui avoir la même forme tout en répondant à des besoins distincts. À l’inverse, une même règle peut être répétée dans deux endroits très différents. La question utile n’est donc pas seulement « Ces lignes se ressemblent-elles? », mais « Est-ce la même règle ou la même intention, et devra-t-elle changer ensemble? »

Une chasse mécanique au copier-coller peut créer des abstractions qui cachent le sens des règles ou lient des changements qui devraient rester indépendants. DRY n’établit pas de nombre universel d’occurrences à partir duquel il faut abstraire.

Comment décider si deux occurrences doivent être réunies

  1. Identifie ce que chaque occurrence exprime. S’agit-il de la même règle métier, du même calcul ou de la même contrainte, ou seulement d’une structure de code similaire?
  2. Demande-toi comment la règle évoluera. Si sa modification exige de mettre à jour toutes les occurrences pour préserver le même comportement, il peut s’agir d’une connaissance dupliquée.
  3. Choisis une représentation faisant autorité. Si les occurrences expriment bien la même intention, une fonction ou une autre source commune peut centraliser la règle. Les autres usages peuvent alors s’appuyer sur cette source.
  4. Vérifie que l’abstraction conserve le sens. Si deux règles similaires doivent pouvoir changer indépendamment, les réunir risque de rendre cette indépendance moins évidente.

Exemple : une règle de validation répétée

Supposons que deux parties d’une application valident la même limite de taille pour un champ. Si cette limite change, modifier les deux validations séparément crée un risque d’incohérence : l’une peut appliquer la nouvelle règle tandis que l’autre conserve l’ancienne. Une validation partagée peut alors devenir la représentation de référence, à condition que les deux usages appliquent réellement la même règle.

En revanche, deux conditions qui se ressemblent peuvent protéger des opérations différentes. Si leurs exigences sont distinctes et susceptibles d’évoluer séparément, une abstraction commune pourrait dissimuler ces différences. La ressemblance seule ne suffit pas à justifier leur fusion.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Quand plusieurs représentations sont nécessaires

Les contraintes d’une base de données, d’un middleware ou d’autres composants peuvent imposer que la même connaissance existe sous plusieurs formes. Dans ce cas, DRY n’exige pas nécessairement qu’une seule représentation physique subsiste. L’objectif est de savoir laquelle fait autorité et, lorsque c’est possible, de produire les représentations secondaires à partir de celle-ci. Dave Thomas formule cet idéal ainsi : « Ideally, you’d be able to automatically generate or produce the nonauthoritative sources from the single authoritative source. » Lire son article dans IEEE Software.

Cette approche s’applique aussi hors du code : documentation, schémas de base de données et processus de développement peuvent contenir des versions d’une même règle. L’enjeu pratique est de limiter les mises à jour manuelles contradictoires en rendant claire la source de vérité.

Pourquoi DRY aide la maintenance

Une représentation faisant autorité clarifie l’endroit où modifier une règle et réduit le risque d’oublier une occurrence qui doit rester synchronisée. Le bénéfice défendable est une meilleure cohérence et une maintenance plus lisible; les sources citées ne donnent pas de chiffre permettant d’attribuer à DRY une baisse mesurée des bogues, un gain de productivité ou un pourcentage de code à éliminer.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Pour approfondir

The Pragmatic Programmer: Your Journey to Mastery, de David Thomas et Andrew Hunt, comprend une section intitulée « DRY—The Evils of Duplication ». La page de l’éditeur présente l’édition du 20e anniversaire, publiée en septembre 2019, en formats imprimé et numérique. Consulter la page officielle du livre. Steve Smith traite également du principe dans le chapitre 30 de 97 Things Every Programmer Should Know, publié par O’Reilly. Voir l’aperçu du chapitre.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.