Code Smells.
Indicators of deeper problems in code. Each entry links to the refactorings that treat it.
Два класса выполняют одинаковые функции, но имеют разные названия методов.
Если подкласс использует лишь малую часть унаследованных методов и свойств суперкласса, это является признаком неправильной иерархии. При этом ненужные методы могут просто не использоваться либо быть переопределёнными и выбрасывать исключения.
У вас есть сложный оператор switch или последовательность if-ов.
Временные поля — это поля, которые нужны объекту только при определённых обстоятельствах. Только тогда они заполняются какими-то значениями, оставаясь пустыми в остальное время.
Метод содержит множество поясняющих комментариев.
Классы данных — это классы, которые содержат только поля и простейшие методы для доступа к ним (геттеры и сеттеры). Это просто контейнеры для данных, используемые другими классами. Эти классы не содержат никакой дополнительной функциональности и не могут самостоятельно работать с данными, которыми владеют.
Переменная, параметр, поле, метод или класс больше не используются (чаще всего потому, что устарели).
Два фрагмента кода выглядят почти одинаковыми.
На понимание и поддержку классов всегда требуются затраты времени и денег. А потому, если класс не делает достаточно много, чтобы уделять ему достаточно внимания, он должен быть уничтожен.
Класс, метод, поле или параметр не используются.
Иногда в разных частях кода встречаются одинаковые группы переменных (например, параметры подключения к базе данных). Такие группы следует превращать в самостоятельные классы.
Класс содержит множество полей/методов/строк кода.
Метод содержит слишком большое число строк кода. Длина метода более десяти строк должна начинать вас беспокоить.
Количество параметров метода больше трёх-четырёх.
Использование элементарных типов вместо маленьких объектов для небольших задач (например, валюта, диапазоны, специальные строки для телефонных номеров и т. п.)Использование констант для кодирования какой-то информации (например, константа USER_ADMIN_ROLE = 1 для обозначения пользователей с ролью администратора).Использование строковых констант в качестве названий полей в массивах.
При внесении изменений в класс приходится изменять большое число различных методов. Например, для добавления нового вида товара вам нужно изменить методы поиска, отображения и заказа товаров.
Всякий раз при создании подкласса какого-то класса приходится создавать ещё один подкласс для другого класса.
При выполнении любых модификаций приходится вносить множество мелких изменений в большое число классов.
Метод обращается к данным другого объекта чаще, чем к собственным данным.
Один класс использует служебные поля и методы другого класса.
Вы видите в коде цепочки вызовов вроде такой $a->b()->c()->d()
Если класс выполняет одно действие — делегирует работу другому классу — стоит задуматься, зачем он вообще существует.