Признаки кода, которые могут указывать на потенциальные проблемы в программе (по категориям):
1. Bloaters (раздуватели):
- Long Method: Слишком длинные функции/методы, которые следует разделить для улучшения читаемости и поддерживаемости.
- Large Class: Классы, выполняющие слишком много задач, что нарушает принцип единственной ответственности (SRP).
- Primitive Obsession: Чрезмерное использование примитивных типов данных вместо создания специализированных классов.
- Long Parameter List: Методы с большим количеством параметров, что затрудняет их использование.
- Data Clumps: Группы данных, которые всегда появляются вместе, что может указывать на необходимость создания нового класса.
2. Object-Orientation Abusers (нарушители объектно-ориентированного подхода):
- Switch Statements: Частое использование switch-операторов, что может быть заменено полиморфизмом.
- Temporary Field: Временное поле, используемое только при выполнении определенного условия - можно заменить на локальную переменную/параметр.
- Refused Bequest: Подкласс, который никак не изменяет функционал базового класса, что может указывать на неправильную иерархию.
- Alternative Classes with Different Interfaces: Классы с похожим поведением, но разными интерфейсами, которые можно объединить или извлечь общий интерфейс.
3. Change Preventers (препятствия изменениям):
- Divergent Change: Класс, который часто изменяется по разным причинам, что требует разделения на более мелкие классы.
- Shotgun Surgery: Мелкие изменения, разбросанные по многим классам, что указывает на плотное связывание и необходимость рефикторинга классов в модули.
- Parallel Inheritance Hierarchies: Добавление подклассов в одну иерархию требует добавления в другую, что можно заменить делегированием или композицией.
4. Dispensables (Излишние конструкции):
- Comments: Избыточные или устаревшие комментарии, которые лучше заменить самодокументируемым кодом.
- Duplicate Code: Повторяющийся код, который следует вынести в отдельный метод.
- Dead Code: Неиспользуемый код, который нужно удалить.
- Lazy Class: Класс с минимальной ответственностью, который можно объединить или удалить.
- Speculative Generality: Код, написанный для будущих нужд, который в текущий момент можно удалить, сфокусировавшись на текущийх потребностях
5. Couplers (Связыватели)
- Feature Envy: Метод обращается к данным другого класса чаще, чем к своим. Можно переместить метод в класс, к которому он относится.
- Inappropriate Intimacy: Классы слишком зависят друг от друга. Можно усилить инкапсуляцию и уменьшить зависимости.
- Message Chains: Длинные последовательности вызовов методов. Можно объединить в вспомогательные специальные методы.
- Middle Man: Класс, который в основном делегирует задачи другим. Можно удалить или объединить функциональность для упрощения.
Post #2069
2.25K
- 👍 28
- 🤝 4
- ❤ 2
- 🔥 1