Eu tenho algum código que é quase idêntico, mas usa tipos absolutamente diferentes, sem herança entre eles, na variável principal. Especificamente, estou escrevendo um analisador com Roslyn para C # e VB.NET, com os seguintes tipos:
Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeSyntax
Gostaria de saber se, como o código está fazendo a mesma coisa, devo mantê-lo o mais SECO possível, dividindo o mínimo possível em métodos separados (mas idênticos, exceto o tipo), ou separá-lo completamente porque os dois métodos são mudanças não relacionadas e futuras podem forçar uma versão a mudar, mas não a outra (embora isso seja improvável)?
Edit: Um ano depois, eu encontrei o mesmo problema, e a equipe de Roslyn me ajudou a resolvê-lo: escreva uma classe base que use genéricos e tenha um TAttributeSyntax
parâmetro que faça a maior parte do trabalho. Em seguida, escreva classes derivadas com o mínimo de dados necessários para um tipo específico.
Respostas:
Você não faz DRY porque alguém escreveu em um livro em algum lugar que é bom fazer, você faz DRY porque na verdade tem benefícios tangíveis.
Especificamente dessa pergunta:
Então, basicamente, não pense "oh cara, esse código é bem parecido, talvez eu deva refatorar para não me repetir". Pense "a refatoração para fazer com que essa base de código reutilize elementos comuns torna o código mais sustentável ou menos sustentável ?" Em seguida, escolha o que o torna mais sustentável.
Dito isto, considerando o SRP e apenas tentando ter classes pequenas e flexíveis em geral, pode fazer sentido analisar seu código por esse motivo , separar partes do comportamento que usam tipos genéricos (você disse que eles são idênticos, exceto o tipo) em turmas pequenas. Depois, você descobrirá que algumas dessas classes são totalmente idênticas (não apenas idênticas) e, em seguida, poderá criar um kit de ferramentas, caso deseje adicionar
Microsoft.CodeAnalysis.CPlusPlus.Syntax.AttributeSyntax
.fonte