Refatoração: Como deixar seu código livre de maus Cheiros
Transcript of Refatoração: Como deixar seu código livre de maus Cheiros
Refatoração: Mantendo o código livre de maus
cheirosCode Smell
Pedro H.O.Silvapedrohosilva.wordpress.com/
Quem é você?
Não sou esses caras
Quem é você?
Uai, má o que c vai fala, sô?
Robert C. Martin - "Uncle Bob"
Mas Primeiro: Teoria das Janelas Quebradas
Em 1982 pelos americanos James Wilson e George Kellinghttp://drauziovarella.com.br/drauzio/janelas-quebradas/
Que Diabos/Minuto
Segundo "Uncle Bob", a unidade de medida para um código é Que
Diabos/minuto !
Afinal, o que é um código SUJO?!
Afinal, o que é um código SUJO?!Bjarne Stroustrup ( Pai do C++ )
● A lógica deve ser direta, para dificultar o encobrimento de bugs;
● Dependências mínimas;
● Tratamento de erro;
● O Código limpo, faz bem apenas uma coisa, executa apenas uma tarefa.
Dave Tomas ( Criador do Eclipse )
● O código limpo tem testes de uma forma geral, como unitários, integração, aceitação etc.
● Nome significativos (nada de “int i;”);
● Poucas dependências e fazer apenas uma tarefa (como citado por Bjarne);
Dando nome aos Bois!
Nomeando as coisas ( Classes, Métodos, Variáveis, etc… )
Bizu #01 - Sempre que encontrar um nome ruim, mude-o ( CTRL + ALT + R );
Bizu #02 - Dê nomes que tenham dignificados, nada de: int i, String x, Date dmahmsegs;
Dando nome aos Bois!
Bizu #03 - Evite nomes com mais de um siginificado ou com duplo sentido,
Ex:. HP empresa ou Hipotenusa? ;
Bizu #04 - Evite nomes muito parecidos, Ex:.
XYZControllerForEfficientHandlingOfStringXYZControllerForEfficientStorageOfString
Dando nome aos Bois!
Bizu #05 - Dê nomes pronunciáveis, EX:.genymdhms ou generationTimestamp?
Padrão SUN: Classes
● Substantivos;● Primeira Letra Maiúscula;● Para Palavras Compostas, usar o CamelCase;
Ex:. Dog, ServicoPagamentoCompleto ...
Padrão SUN: Interfaces
● Primeira Letra Maiúscula;● Para Palavras Compostas, usar o CamelCase;● Alguns usam IDAO e DAO● Alguns usam DAO e DAOImpl● Sempre que possível usar nomes mais que
mostrem seu propósito, como por exemplo List e ArrayList, no JAVA
Ex:. DAO, IDAO, DAO, DAOIml...
Padrão SUN: Métodos
● Primeira Letra Minuscula;● Para Palavras Compostas, usar o CamelCase,
mas sempre manter a primeira minuscula;● Verbo-Substantivo
Ex:. getNome, setIdade, somarSalarios ...
Padrão SUN: Variáveis
● Primeira Letra Minuscula;● Para Palavras Compostas, usar o CamelCase,
mas sempre manter a primeira minuscula;● Nomes significativos;● Nomes Pequenos, sempre que possível
Ex:. nome, idade, enderecoEntrega ...
Padrão SUN: Constantes
● Marcados como Final e Static;● Todas letras maiúsculas;● Palavras Compostas, separar por
UnderScore ( _ )
Ex:. static final ENVIA_POR_ARQUIVO
Testes
● Mesmo padrão citado nos casos anteriores, mas para as classes é padrão acrescentar o sufixo Test, e também manter o mesmo nome de pacote, porem em uma src diferente.
Ex:. GeraArquivoTest.class
Métodos
● Pequenos, de 20 a 30 linhas ( eu já vi métodos com mais de 1000 linhas);
● Fazer apenas uma coisa, devem fazê-la bem, devem fazer apenas ela;
Bizu #06 - Use a extração de métodos, classes e interfaces que as IDEs modernas possuem ( CTRL + 1 )
Métodos
● Evite muitos Ifs e Elses, utilizar padrões de projeto que faça abstração, como Chain of Responsability, Abstract, Factory, etc…
● Os blocos if, else, while, switch/case devem conter, de preferência, apenas uma linha, sendo ela uma chamada de função;
Métodos: Parâmetros
● A quantidade de parâmetros ideal, é ZERO, 0, NULO;
● Mas…○ Mônade;○ Díade;○ Tríades;○ Políade (Caso muito especial)
● Para evitar isso utilize objetos;
Métodos
● Evite Repetição de Código
Comentários
Comentários
● Não insira comentários em um código ruim, reescreva-o;
● Comentários velhos são mentirosos, e o pai da mentira é o ….
● Geralmente os comentários não são atualizados;
Comentários
● Código bom é auto-explicativo, não precisa de comentários
● Ler um código bem escrito, é como ler uma bela poesia;
Comentários Bons
● Legais (Direitos autorais)
● Explicativa, tivemos que fazer isso por causa disso, foi a melhor maneira que encontramos de fazer isso, etc …
● Alerta sobre consequencias Ex:. Não usar este teste porque ele gera um relatório real;
● Comentários TODO
Comentários Ruins
● Comentários Redundantes;● Comentários Enganadores;● Comentários Imperativos ( @Param do
javadoc )● Comentários Longos;● Comentários Ruidosos
Ex:. /*dia do mes */ private int diaDoMes;● Marcadores de posição
Ex:. // ########################
Formatação
● Formatação é importante SIM!
● Entre em acordo com o time de desenvolvimento e definam um padrão;
● Procurem por padrões já estabelecidos;
● Metáfora do Jornal;
Formatação: Bizus
Bizu #07 - No eclipse utilize - CTRL + 3 e digite: Formatter, clique na opção:
Agora você pode editar sua formatação ;D
Formatação: Bizus
Bizu #08 - No eclipse utilize - CTRL + 3 e digite: Save Actions, clique em:
Agora você pode habilitar a ação que toda vez que o documento é salvo ele formata o código.
OBS:. Com o Save Actions é possível configurar vários combos ;D
Tratamento de Erros
● Sempre que possível use Try/Catch;
● Faça um bom sistema de Logs no seu projeto;
● Tente cobrir a maior parte do código com testes;
● Build automatizado/Integração Contínua;
DUVIDAS?
Blog: pedrohosilva.wordpress.com
Facebook: /pedrohenrique.silva.106
E-mail: [email protected]
BitBucket: bitbucket.org/pedrosjcampos