2026-02-23 19:52:05 +03:00

54 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг #методы_рефакторинга
![[Pasted image 20250219083328.png]]
### **Проблема**
Два класса имеют одно и то же поле
```javascript
class Employee {...} // Java
class Salesman extends Employee {
private String name;
}
class Engineer extends Employee {
private String name;
}
```
### **Решение**
Переместите поле в суперкласс, убрав его из подклассов.
```javascript
class Employee {
protected String name;
}
class Salesman extends Employee {...}
class Engineer extends Employee {...}
```
### **Причины рефакторинга**
Подклассы развивались независимо друг от друга. Это привело к созданию одинаковых (или очень похожих) полей и методов.
### **Достоинства**
- Убивает дублирование полей в подклассах
- Облегчает дальнейший перенос дублирующих методов из подклассов в суперкласс, если они есть
### **Порядок рефакторинга**
1. Проверьте, что оба поля используются для одинаковых нужд в подклассах.
2. Если поля имеют разные названия, дайте им общее имя и замените все обращения к полям в существующем коде.
3. Создайте поле с таким же именем в суперклассе. Обратите внимание на то, что если поля были приватные (private), поле в суперклассе должно быть защищённым (protected).
4. Удалите поля из подклассов
### **Обратный рефакторинг**
- [[Опускание поля (Push Down Field)]]
### **Борется с запахом**
- [[Дублируемый код]]
### **Ссылки**
- https://refactoring.guru/ru/pull-up-field
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]