2.8 KiB
2.8 KiB
#рефакторинг #методы_рефакторинга
Проблема
У вас есть некая иерархия классов, в которой подкласс мало чем отличается от суперкласса.
class Employee {...}
class Salesman extends Employee {...}
Решение
Слейте подкласс и суперкласс воедино.
class Employee {...}
Причины рефакторинга
Развитие программы привело к тому, что подкласс и суперкласс стали очень мало отличаться друг от друга. Какая-то фича была убрана из подкласса, какой-то метод «переехал» в суперкласс, и вот вы уже имеете два практически одинаковых класса.
Достоинства
- Уменьшается сложность программы. Меньше классов, меньше вещей, которые нужно держать в голове, меньше «движущихся частей», меньше вероятность сломать что-то при последующих изменениях в коде.
- Навигация по коду становится проще, когда методы определены только в одном классе. Нужный метод не приходится искать по всей иерархии.
Порядок рефакторинга
- Выберите, какой класс убрать удобнее: суперкласс или подкласс.
- Используйте Подъем поля (Pull Up Field) и Подъем метода (Pull Up Method), если вы решили избавиться от подкласса. Используйте Опускание поля (Push Down Field) и Опускание метода (Push Down Method), если убран будет суперкласс.
- Замените все использования класса, который будет удалён, классом, в который переезжают поля и методы. Зачастую это будет код создания классов, указания типов параметров и переменных, а также документации в комментариях.
- Удалите пустой класс
