![Page 1: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/1.jpg)
C#: Refatorando 3 Conclusão
![Page 2: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/2.jpg)
Simplificar Chamadas
Parte 3
Generalização
![Page 3: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/3.jpg)
Técnicas Para Simplificar Chamadas a Métodos
![Page 4: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/4.jpg)
40) Renomear Método
Problema: O nome do método não explica o que ele faz OU existe método semelhante
Solução: Renomear o método
Refatorações similares● Adicionar Parâmetro● Remover Parâmetro
Elimina os odores● Classes Alternativas com Interfaces Diferentes● Comentários
![Page 5: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/5.jpg)
41) Adicionar ParâmetroProblema: Um método não tem todos os dados de que precisa para fazer seu trabalho (mas o chamador tem esses dados!)
Solução: Crie parâmetros para fornecer os dados necessários ao método
Refatoração inversaRemover Parâmetro
Auxilia outras refatoraçõesIntroduzir Objeto-Parâmetro
![Page 6: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/6.jpg)
![Page 7: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/7.jpg)
42) Remover ParâmetroProblema: Um parâmetro não é usado dentro do corpo do métodoSolução: Remova o parâmetro não utilizadoRefatoração inversaAdicionar ParâmetroAuxilia outras refatoraçõesSubstituir Parâmetro por Chamada a MétodoElimina os odoresGeneralidade Especulativa
![Page 8: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/8.jpg)
![Page 9: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/9.jpg)
43) Separar Consulta do Modificador
Problema: Um método faz duas coisas: retorna dados mas também executa algum comandoSolução: Quebre o método em dois. Um método vai retornar dados e o outro vai executar comandos.Auxilia outras refatoraçõesSubstituir Variável Temporária por Consulta a Método
![Page 10: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/10.jpg)
![Page 11: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/11.jpg)
44) Parametrizar MétodoProblema: Vários métodos executam ações similares que só diferem em valores, números ou operações
Solução: Combine esses métodos utilizando um parâmetro que passará os valores necessários
Refatoração inversaSubstituir Parâmetro por Métodos Explícitos
Refatorações similares● Extrair Método● Formar Método Template
Elimina os odoresCódigo Duplicado
![Page 12: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/12.jpg)
![Page 13: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/13.jpg)
45) Substituir Parâmetro por Métodos Explícitos
Problema: Um método retorna valores diferentes dependendo do valor de um parâmetroSolução: Extraia as partes do método em métodos distintos, cada um com sua lógica independenteRefatoração inversaParametrizar MétodoElimina os odores● Comando Switch● Método Longo
![Page 14: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/14.jpg)
46) Preservar Objeto InteiroProblema: Você está obtendo valores de um objeto e em seguida passando esses valores para um métodoSolução: Passe o objeto inteiro como parâmetro
Refatorações similares● Introduzir Objeto-Parâmetro● Substituir Parâmetro por Chamada a Método
Elimina os odores● Obsessão por Primitivos● Longa Lista de Parâmetros● Método Longo● Massa de Dados
![Page 15: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/15.jpg)
47) Substituir Parâmetro por Chamada a Método
Problema: Fazer uma consulta a um método e usar o resultado como parâmetro de um outro método, sendo que este poderia chamar a consulta diretamente
Solução: Faça o segundo método chamar a consulta
![Page 16: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/16.jpg)
48) Introduzir Objeto-ParâmetroProblema: Métodos que exigem sempre o mesmo grupo de parâmetros
Solução: Substitua esses parâmetros por um objeto
Refatorações similaresPreservar Objeto Inteiro
Elimina os odores● Longa Lista de Parâmetros● Massa de Dados● Obsessão por Primitivos● Método Longo
![Page 17: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/17.jpg)
![Page 18: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/18.jpg)
49) Remover Método Setter
Problema: O valor de um campo deveria ser definido somente durante sua criação, e nunca mais alteradoSolução: Remova métodos e setters que alteram o campoAuxilia outras refatoraçõesChange Reference to Value
![Page 19: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/19.jpg)
50) Ocultar Método
Problema: Um método não é usado por outras classes ou fora de sua hierarquiaSolução: Marque o método como private ou protected.Elimina os odoresClasse de Dados
![Page 20: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/20.jpg)
![Page 21: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/21.jpg)
51) Substituir Construtor por Método Factory
Problema: Você tem um construtor que realiza tarefas complexasSolução: Crie um método factory e use-o no lugar das chamadas ao construtorImplementa os padrões de projetoMétodo Factory
![Page 22: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/22.jpg)
52) Substituir Código de Erro por Exception
Problema: Um método retorna um valor especial para indicar um erroSolução: Lance uma exceção no lugar de retornar o valor especial
![Page 23: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/23.jpg)
53) Substituir Exceção por Teste
Problema: Em vez de fazer um simples teste, você está lançando uma exceçãoSolução: Substitua a exceção por uma condição de testeRefatorações similaresSubstituir Código de Erro por Exceção
![Page 24: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/24.jpg)
Técnicas de Generalização
![Page 25: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/25.jpg)
54) Subir MétodoProblema: Duas classes possuem métodos que fazem a mesma coisa (ou quase)
Solução: Remova os métodos das subclasses e mova-o para a superclasse
Refatoração inversaDescer MétodoElimina os odoresCódigo Duplicado
![Page 26: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/26.jpg)
![Page 27: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/27.jpg)
55) Subir Corpo do Construtor
Problema: As subclasses possuem construtores quase idênticosSolução: Crie um construtor na superclasse e mova o código comum para lá. Chame o construtor da superclasse a partir das subclassesElimina os odoresCódigo Duplicado
![Page 28: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/28.jpg)
56) Descer Método
Problema: Comportamento implementado na superclasse, mas usado em apenas uma subclasseSolução: Mova este comportamento para a subclasseRefatoração inversaSubir MétodoElimina os odoresHerança Rejeitada
![Page 29: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/29.jpg)
![Page 30: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/30.jpg)
57) Descer Campo
Problema: Um campo é usado apenas em uma subclasseSolução: Mova este campo para essa subclasseRefatoração inversaSubir CampoElimina os odoresHerança Rejeitada
![Page 31: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/31.jpg)
![Page 32: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/32.jpg)
58) Extrair Subclasse
Problema: Uma classe tem um conjunto de dados e comportamentos só usado em alguns casosSolução: Crie uma subclasse para essas situaçõesElimina os odoresClasse Grande
![Page 33: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/33.jpg)
![Page 34: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/34.jpg)
59) Extrair SuperclasseProblema: Duas ou mais classes possuem mesmos métodos ou dadosSolução: Crie uma superclasse e mova para lá os dados e comportamentos comuns das subclassesRefatorações similaresExtrair InterfaceElimina os odoresCódigo Duplicado
![Page 35: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/35.jpg)
60) Extrair Interface
Problema: Código “cliente” usa a mesma interface de algumas classesSolução: Extraia a interface comum dessas classes para uma interfaceRefatorações similaresExtrair Superclasse
![Page 36: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/36.jpg)
![Page 37: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/37.jpg)
61) Colapsar Hierarquia
Problema: Subclasse e superclasse são praticamente iguaisSolução: Use somente uma das classes. Migre a diferença e remova a outra classe.Elimina os odores● Classe Preguiçosa● Generalidade Especulativa
![Page 38: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/38.jpg)
![Page 39: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/39.jpg)
62) Formar Método TemplateProblema: Duas ou mais subclasses possuem métodos diferentes, mas que executam um algoritmo na mesma ordemSolução: Crie um método na superclasse que contenha o “esqueleto” com a sequência de passos. Para cada passo, chame um método da subclasse.Implementa os padrões de projetoMétodo TemplateElimina os odoresCódigo Duplicado
![Page 40: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/40.jpg)
![Page 41: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/41.jpg)
63) Substituir Herança por Delegação
Problema: Subclasse só usa uma parte dos dados ou comportamentos da superclasse (herança mal utilizada)Solução: Utilize a superclasse como campo da subclasse. Chame os métodos e dados da superclasse. Elimine a herança.Refatoração inversaSubstituir Delegação por Herança
![Page 42: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/42.jpg)
![Page 43: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/43.jpg)
Para saber mais
Composition over inheritancehttps://en.wikipedia.org/wiki/Composition_over_inheritance
![Page 44: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/44.jpg)
64) Substituir Delegação por Herança
Problema: Uma classe tem um campo que referencia outra classe, e tem métodos simples, que fazem nada além de chamar os métodos dessa outra classeSolução: Faça uma herança, remova o campo e passe a utilizar os métodos da superclasseElimina os odoresIntimidade Inapropriada
![Page 45: Conclusão C#: Refatorando 3...Problema: Vários métodos executam ações similares que só diferem em valores, números ou operações Solução: Combine esses métodos utilizando](https://reader034.vdocuments.net/reader034/viewer/2022050414/5f8ab105010f0f58a544324d/html5/thumbnails/45.jpg)