DRY pour Don't Repeat Yourself est une philosophie en programmation informatique consistant à éviter la redondance de code au travers de l'ensemble d'une application afin de faciliter la maintenance, le test, le débogage et les évolutions de cette dernière. Le copier / coller de code n'est pas une pratique acceptable et quand on veut réutiliser un code on utilise la factorisation.
Il convient de toujours identifier, séparer et encapsuler ce qui varie de ce qui n'est pas susceptible d'évoluer dans le temps. Par exemple, si on identifie le besoin d'écrire des logs dans la console ou dans un fichier, on créera une abstraction sur l'écriture des logs.
Si deux classes B et C ont besoin d'utiliser du code commun et qu'on souhaite éviter la duplication du code, on peut placer ce code commun dans une classe A et faire hériter les classes B et C de A, mais ce n'est pas forcément correct d'un point de vue modélisation.
On n'hérite pas d'une classe dans le but de réutiliser des méthodes !
L'héritage est correctement utilisé si il sert au polymorphisme : si B hérite de A, il faut que ça ai du sens et donc que B soit un sous-type de A. De plus, il faut garantir le principe de substitution de Liskov : peut-on remplacer toute référence à A dans le code par une référence à B ?
Il s'agit d'erreurs de conception courantes dont le nom a été standardisé :
- Réinventer la roue carrée : ne pas s'appuyer sur des API ou solutions existantes;
- Programmation spaghetti : il est délicat de pouvoir modifier une partie du code sans en alté-rer le fonctionnement. Impossible de correctement identifier le qui, quoi et comment d'une prise de contrôle par une portion du programme. Le rôle des différents éléments du système n'est pas clairement identifiable.
- Objet divin : composant logiciel assurant trop de fonctions essentielles, trop de responsabilités
- Ancre de bateau : composant inutilisé mais qui est gardé sous le coude, des fois que (on pense qu'il pourra peut-être servir plus tard)
- Marteau doré : consiste à réutiliser une technologie familière de manière obsessionnelle appliquée à beaucoup de problèmes. Un outil est placé comme solution à tous les problèmes. Il peut s'agir d'une bibliothèque, d'une base de données, d'une suite de logiciel, etc.
- Coulée de lave : se produit lorsqu'une partie de code encore immature est mise en production, forçant la lave à se solidifier en empêchant sa modification. Il n'est plus possible de refactorer le code.