conclusão c#: refatorando 3...problema: vários métodos executam ações similares que só diferem...

45
C#: Refatorando 3 Conclusão

Upload: others

Post on 03-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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
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

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
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

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
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

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
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

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

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

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

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
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

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

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
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

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

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

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

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

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
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

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

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
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

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
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

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
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

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

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
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

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
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

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
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

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
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

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

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