Code Smells.
Indicators of deeper problems in code. Each entry links to the refactorings that treat it.
Deux classes remplissent des fonctions identiques mais ont des noms de méthodes différents.
Si une sous-classe n'utilise qu'une partie des méthodes et propriétés héritées de ses parents, la hiérarchie est bancale. Les méthodes inutiles peuvent simplement rester inutilisées ou être redéfinies pour lever des exceptions.
Vous avez un opérateur switch complexe ou une suite d'instructions if.
Les champs temporaires reçoivent leurs valeurs (et sont donc nécessaires aux objets) uniquement dans certaines circonstances. En dehors de ces circonstances, ils sont vides.
Une méthode est truffée de commentaires explicatifs.
Une classe de données désigne une classe qui ne contient que des champs et des méthodes rudimentaires pour y accéder (getters et setters). Ce ne sont que de simples conteneurs de données utilisés par d'autres classes. Ces classes ne contiennent aucune fonctionnalité supplémentaire et ne peuvent pas opérer de manière autonome sur les données qu'elles possèdent.
Une variable, un paramètre, un champ, une méthode ou une classe n'est plus utilisé (généralement parce qu'il est obsolète).
Deux fragments de code se ressemblent presque à l'identique.
Comprendre et maintenir des classes coûte toujours du temps et de l'argent. Donc si une classe n'en fait pas assez pour mériter votre attention, elle doit être supprimée.
Il existe une classe, une méthode, un champ ou un paramètre inutilisé.
Il arrive que différentes parties du code contiennent des groupes de variables identiques (comme les paramètres de connexion à une base de données). Ces amas devraient être transformés en classes à part entière.
Une classe contient de nombreux champs, méthodes ou lignes de code.
Une méthode contient trop de lignes de code. En règle générale, toute méthode de plus de dix lignes devrait vous amener à vous poser des questions.
Plus de trois ou quatre paramètres pour une méthode.
Utilisation de primitifs au lieu de petits objets pour des tâches simples (comme les montants monétaires, les plages de valeurs, les chaînes spéciales pour les numéros de téléphone, etc.) Utilisation de constantes pour encoder des informations (comme une constante USER_ADMIN_ROLE = 1 pour désigner les utilisateurs disposant de droits d'administrateur.) Utilisation de constantes de type chaîne comme noms de champs pour les tableaux de données.
Vous vous retrouvez à devoir modifier de nombreuses méthodes sans rapport entre elles lorsque vous apportez des changements à une classe. Par exemple, lors de l'ajout d'un nouveau type de produit, vous devez modifier les méthodes de recherche, d'affichage et de commande des produits.
Chaque fois que vous créez une sous-classe pour une classe, vous vous retrouvez à devoir créer une sous-classe pour une autre classe.
La moindre modification vous oblige à apporter de nombreux petits changements à de nombreuses classes différentes.
Une méthode accède aux données d'un autre objet plus qu'à ses propres données.
Une classe utilise les champs et méthodes internes d'une autre classe.
Dans le code, vous voyez une série d'appels ressemblant à $a->b()->c()->d()
Si une classe n'effectue qu'une seule action, déléguant le travail à une autre classe, pourquoi existe-t-elle ?