J'ai du code presque identique, mais utilise des types absolument différents, sans héritage entre eux, sur la variable principale. Plus précisément, j'écris un analyseur avec Roslyn pour C # et VB.NET, avec les types suivants:
Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeSyntax
Je me demande si, parce que le code fait la même chose, je devrais le garder aussi sec que possible, en séparant le moins possible en méthodes distinctes (mais identiques, à part le type), ou en les séparant complètement, car les deux méthodes sont: non lié et les modifications futures pourraient forcer une version à changer, mais pas l'autre (bien que cela soit peu probable)?
Edit: Un an plus tard, j’ai fait face au même problème et l’équipe de Roslyn m’a aidé à le résoudre: rédigez un cours de base qui utilise des génériques et qui a un TAttributeSyntax
paramètre qui effectue la majeure partie du travail. Ensuite, écrivez des classes dérivées avec le minimum de données nécessitant un type spécifique.
Réponses:
Vous ne faites pas DRY parce que quelqu'un l'a écrit dans un livre quelque part où il fait bon de le faire, vous le faites parce que cela présente des avantages tangibles.
Plus précisément de cette question:
Donc, fondamentalement, ne pensez pas "oh mec, ce code est assez similaire, je devrais peut-être refactoriser pour ne pas me répéter". Pensez-vous que le refactoring pour que cette base de code réutilise des éléments communs rend le code plus facilement maintenable ou moins maintenable ? Ensuite, choisissez celui qui le rend plus facile à gérer.
Cela dit, étant donné que SRP et l’essai d’avoir de petites classes flexibles en général, il peut être judicieux d’analyser votre code pour cette raison , séparez des éléments de comportement qui utilisent des types génériques petites classes. Ensuite, vous découvrirez que certaines de ces classes sont en réalité totalement identiques (et pas uniquement identiques), puis vous pouvez créer une boîte à outils au cas où vous souhaiteriez en ajouter
Microsoft.CodeAnalysis.CPlusPlus.Syntax.AttributeSyntax
.la source