Je cherche des conseils sur le couplage DRY vs Code. Je n'aime pas dupliquer mon code et je n'aime pas non plus le couplage de code entre des modules non liés. Je refactorise donc le code en double si je trouve du code identique un an après l'introduction de la duplication. Cependant, j'ai de plus en plus connu des situations où le monde réel est beaucoup plus imprévisible, et après avoir refactorisé le code, il se produit des situations qui nécessitent de refaire le code.
Par exemple, si j'avais un code pour gérer les voitures à essence, les VUS à essence, les voitures électriques et les VUS électriques, disons que j'ai refactorisé le code en double dans la hiérarchie "essence" et la hiérarchie "électrique", toutes deux descendant de la hiérarchie "véhicule". Jusqu'ici tout va bien. Et puis, mon entreprise présente une voiture hybride et une semi-hybride qui nécessiteraient des changements de base dans ma hiérarchie d'origine elle-même. Il faudrait peut-être une "composition" entre l'essence et les hiérarchies électriques.
Il est clair que la duplication de code est mauvaise car elle augmente le temps nécessaire pour implémenter un changement commun à tous les produits ci-dessus. Mais la refactorisation du code commun rend également difficile l'introduction de variations spécifiques au produit, et conduit à beaucoup de "saut de classe" quand il faut trouver la ligne de code pour corriger un bogue - un changement dans une classe parent de niveau supérieur pourrait déclencher déclencher des bogues de régression parmi tous les descendants.
Comment trouver un équilibre optimal entre DRY et couplage de code indésirable?