Recentemente, encontrei uma boa resposta para minha pergunta no "Código Limpo" do tio Bob, que quero compartilhar. Ele diferencia três tipos de duplicação
Pedaços de código idêntico devem ser substituídos por um único método. Portanto, a correção seria extrair o método e delegar ao comportamento comum.
- no mesmo método, execute Extrair variável local e reutilize-a.
- na mesma classe, execute a refatoração de Método de Extração.
- nas classes da mesma hierarquia Extrair Método e Subir. Uma hierarquia pode ser criada para encontrar um local para os métodos.
- nas classes de hierarquias separadas, use delegação para novos objetos.
- Se os métodos não precisarem de nenhum estado envolvente, o padrão "lib" poderá ser aplicado (que é um contêiner para métodos estáticos, geralmente chamado
SthUtil
ou SthLib
).
casos de switch/case
e if/else
que sempre testam o mesmo conjunto de condições .
- Estes devem ser substituídos por polimorfismo.
Módulos que implementam algoritmos semelhantes . Eles são mais difíceis de encontrar, pois nenhum detector de clone pode encontrá-los.
- Como o escopo é maior, são utilizados padrões de design. O padrão de design do método de modelo pode ser aplicado a algoritmos dentro de uma hierarquia de classes.
- O padrão de design da estratégia pode ser aplicado a qualquer algoritmo usado em lugares diferentes.
Também é um ponto válido mencionado por Oded, ao lidar com diferentes versões de bibliotecas
- consolidar em uma única versão. O padrão de design da fachada pode ajudar aqui.
No final, a melhor frase para responder à minha pergunta é por estímulos:
O método de reutilização de código usado nos idiomas OO é um objeto.