Code Smells.
Indicators of deeper problems in code. Each entry links to the refactorings that treat it.
Duas classes executam funções idênticas, mas têm nomes de métodos diferentes.
Se uma subclasse usa apenas alguns dos métodos e propriedades herdados de suas classes pai, a hierarquia está desequilibrada. Os métodos desnecessários podem simplesmente ficar sem uso ou serem redefinidos e lançar exceções.
Você tem um operador switch complexo ou uma sequência de instruções if.
Campos temporários recebem seus valores (e, portanto, são necessários aos objetos) apenas sob certas circunstâncias. Fora dessas circunstâncias, eles ficam vazios.
Um método está repleto de comentários explicativos.
Uma classe de dados se refere a uma classe que contém apenas campos e métodos rudimentares para acessá-los (getters e setters). Elas são simplesmente contêineres de dados usados por outras classes. Essas classes não contêm nenhuma funcionalidade adicional e não conseguem operar de forma independente sobre os dados que possuem.
Uma variável, parâmetro, campo, método ou classe não é mais usado (geralmente porque está obsoleto).
Dois fragmentos de código parecem quase idênticos.
Entender e manter classes sempre custa tempo e dinheiro. Portanto, se uma classe não faz o suficiente para merecer sua atenção, ela deve ser excluída.
Há uma classe, método, campo ou parâmetro sem uso.
Às vezes, diferentes partes do código contêm grupos idênticos de variáveis (como parâmetros para conexão com um banco de dados). Esses aglomerados devem ser transformados em suas próprias classes.
Uma classe contém muitos campos/métodos/linhas de código.
Um método contém linhas de código demais. Em geral, qualquer método com mais de dez linhas deve começar a levantar suspeitas.
Mais de três ou quatro parâmetros para um método.
Uso de primitivos em vez de pequenos objetos para tarefas simples (como moeda, intervalos, strings especiais para números de telefone etc.)Uso de constantes para codificar informação (como uma constante USER_ADMIN_ROLE = 1 para se referir a usuários com direitos de administrador.)Uso de constantes de string como nomes de campos para uso em arrays de dados.
Você se vê tendo que alterar muitos métodos não relacionados ao fazer mudanças em uma classe. Por exemplo, ao adicionar um novo tipo de produto, você precisa alterar os métodos para encontrar, exibir e fazer pedidos de produtos.
Sempre que você cria uma subclasse para uma classe, percebe que precisa criar uma subclasse para outra classe.
Fazer qualquer modificação exige que você faça muitas pequenas alterações em muitas classes diferentes.
Um método acessa os dados de outro objeto mais do que os seus próprios dados.
Uma classe usa os campos e métodos internos de outra classe.
No código você vê uma série de chamadas parecidas com $a->b()->c()->d()
Se uma classe realiza apenas uma ação, delegando o trabalho a outra classe, por que ela existe?