Code Smells.
Indicators of deeper problems in code. Each entry links to the refactorings that treat it.
Dos clases realizan funciones idénticas, pero tienen nombres de método diferentes.
Si una subclase usa solo algunos de los métodos y propiedades heredados de sus padres, la jerarquía está desequilibrada. Los métodos innecesarios pueden simplemente quedar sin usar o redefinirse y lanzar excepciones.
Tienes un operador switch complejo o una secuencia de sentencias if.
Los campos temporales reciben sus valores (y, por tanto, los objetos los necesitan) solo en determinadas circunstancias. Fuera de esas circunstancias, están vacíos.
Un método está lleno de comentarios explicativos.
Una clase de datos es una clase que contiene únicamente campos y métodos rudimentarios para acceder a ellos (getters y setters). No son más que contenedores de datos que utilizan otras clases. Estas clases no contienen ninguna funcionalidad adicional y no pueden operar de forma independiente sobre los datos que poseen.
Una variable, parámetro, campo, método o clase ya no se utiliza (normalmente porque ha quedado obsoleto).
Dos fragmentos de código tienen un aspecto casi idéntico.
Comprender y mantener clases siempre cuesta tiempo y dinero. Por eso, si una clase no hace lo suficiente para merecer tu atención, debería eliminarse.
Hay una clase, un método, un campo o un parámetro sin usar.
A veces, diferentes partes del código contienen grupos idénticos de variables (como los parámetros para conectarse a una base de datos). Estos grupos deberían convertirse en sus propias clases.
Una clase contiene muchos campos/métodos/líneas de código.
Un método contiene demasiadas líneas de código. Por lo general, cualquier método con más de diez líneas debería hacerte empezar a hacer preguntas.
Más de tres o cuatro parámetros para un método.
Uso de primitivos en lugar de pequeños objetos para tareas sencillas (como monedas, rangos, cadenas especiales para números de teléfono, etc.)Uso de constantes para codificar información (como una constante USER_ADMIN_ROLE = 1 para referirse a usuarios con derechos de administrador.)Uso de constantes de cadena como nombres de campo para su uso en arrays de datos.
Te ves obligado a modificar muchos métodos no relacionados cuando haces cambios en una clase. Por ejemplo, al añadir un nuevo tipo de producto tienes que cambiar los métodos para encontrar, mostrar y pedir productos.
Cada vez que creas una subclase para una clase, te ves obligado a crear una subclase para otra clase.
Realizar cualquier modificación requiere que hagas muchos cambios pequeños en muchas clases diferentes.
Un método accede a los datos de otro objeto más que a sus propios datos.
Una clase usa los campos y métodos internos de otra clase.
En el código ves una serie de llamadas que se asemejan a $a->b()->c()->d()
Si una clase realiza una única acción, delegando el trabajo en otra clase, ¿por qué existe siquiera?