Code Smells

6.452 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
6.452
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5.099
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Code Smells

  1. 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Code Smells
  2. 2. http://www.slideshare.net/rodrigobranas
  3. 3. @rodrigobranas rodrigo.branas@gmail.com http://www.agilecode.com.brFormação AcadêmicaCiências da Computação – UFSCGerenciamento de Projetos - FGVCertificaçõesSCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM
  4. 4. Rodrigo Branas – rodrigo.branas@gmail.com10 anos de experiência na plataforma Java1000 horas em sala de aulaMais de 50 palestras em eventosLíder da área de desenvolvimento na GenneraAutor da revista Java MagazinePalestranteInstrutor da Academia Java e Agile da GlobalcodeCriador dos treinamentos de Clean Code, Selenium eMaven da Agile CodeTrabalhou com as empresas: EDS, HP, GM, Citibank,OnCast, Globalcode, V.Office, Dígitro, Softplan, Unimed,Suntech, Vale do Rio Doce, Senai, NET.
  5. 5. Um smell é um sintoma queocorre dentro do código fonte e que pode ser um indicador de problemas.
  6. 6. Qual é a relação entre code smells e defeitos?
  7. 7. Aerodinâmica ou distância da margem
  8. 8. Técnicas de refactoring aplicáveis: Todas relacionadas asimplificação de condicionais Extrair Método
  9. 9. Comentários no código
  10. 10. Autor do código acaba inserindo comentários para tentar compensar a complexidade ou nebulosidade do código
  11. 11. Técnicas de refactoring aplicáveis: Extrair Método
  12. 12. Se os comentários forem desnecessários:Simplesmente apague-os.
  13. 13. 1. ...2. public void transmitirMensagem(String mensagem) {3. // Criando um envelope para enviar a mensagem4. Envelope envelope = new Envelope();5. // Definindo a mensagem no envelope6. envelope.setMensagem(mensagem);7. // Enviando o envelope8. this.sendEnvelope(envelope);9. }10. ...
  14. 14. 1. ...2. public void transmitirMensagem(String mensagem) {3.4. Envelope envelope = new Envelope();5.6. envelope.setMensagem(mensagem);7.8. this.sendEnvelope(envelope);9. }10. ...
  15. 15. 1. ...2. public void transmitirMensagem(String mensagem) {3. Envelope envelope = new Envelope();4. envelope.setMensagem(mensagem);5. this.sendEnvelope(envelope);6. }7. ...
  16. 16. Método longo
  17. 17. Qual é o tamanho ideal?
  18. 18. Sempre deve ser o menor possível
  19. 19. Técnicas de refactoring aplicáveis: Extrair Método
  20. 20. Classes grandes
  21. 21. Por que as classes crescem tanto?
  22. 22. Coesão baixa
  23. 23. Se a sua classe possui muitos métodos longos, resolva um problema de cada vez.
  24. 24. Classes Utilitárias
  25. 25. Técnicas de refactoring aplicáveis: Extrair Classe Extrair Subclasse Mover Método
  26. 26. Longa lista de parâmetros
  27. 27. Qual é o número ideal deparâmetros de um método?
  28. 28. Técnicas de refactoring aplicáveis:Substituir Parâmetro por Método Preservar Objeto Inteiro Introduzir Objeto Parâmetro
  29. 29. Código Duplicado
  30. 30. Técnicas de refactoring aplicáveis: Extrair Método Extrair ClasseSubir Método na HierarquiaIntroduzir Template Method
  31. 31. Grupos de Dados
  32. 32. Existem alguns dados que andam sempre juntos, agrupados.É comum observar esses dados andando juntos na forma de parâmetros.
  33. 33. 1. ...2. public Extrato emitirExtrato(Date inicio, Date fim);3. public double calcularJurosPeriodo(Date inicio, Date fim);4. public boolean verificarCredito(Date inicio, Date fim);5. ...
  34. 34. Técnicas de refactoring aplicáveis: Extrair ClasseIntroduzir Objeto Parâmetro Preservar o Objeto Inteiro
  35. 35. Comandos Switch
  36. 36. Comandos switch tendem a serprocedurais e a se repetirem em diversas partes do software. Ao se deparar com um comando switch você deve considerar aintrodução de um comportamento mais polimórfico.
  37. 37. Técnicas de refactoring aplicáveis: Substituir Enumeração pelo Padrão State ou StrategySubstituir Comando Condicional por Polimorfismo
  38. 38. Generalidade Especulativa
  39. 39. “Eu acho que vamos precisar disso algum dia!”
  40. 40. Excesso de complexidade para tratar casos que ainda não existem.
  41. 41. Técnicas de refactoring aplicáveis:Condensar Hierarquia Internalizar Classe Remover Parâmetro Renomear Método
  42. 42. Cadeias de Mensagens
  43. 43. Um cliente pede algo a umobjeto, que pede a outro objeto,que pede a outro objeto e assim por diante.
  44. 44. 1. ...2. if (cliente.getCarteira().getCartao().verificarValidade()) {3. cliente.getCarteira().getCartao().comprar(valor);4. }5. ...
  45. 45. Lei de Demeter
  46. 46. Não fale com estranhos
  47. 47. Técnicas de refactoring aplicáveis: Ocultar Delegação

×