47 lines
2.1 KiB
Markdown
47 lines
2.1 KiB
Markdown
#рефакторинг #методы_рефакторинга
|
||
|
||
![[Pasted image 20250128082839.png]]
|
||
|
||
**Проблема**
|
||
Класс почти ничего не делает, ни за что не отвечает, и никакой ответственности для этого класса не планируется
|
||
```javascript
|
||
class Person {
|
||
get officeAreaCode() {return this.—telephoneNumber.areaCode;}
|
||
get officeNumber() {return this.—telephoneNumber.number;}
|
||
}
|
||
|
||
class TelephoneNumber {
|
||
get areaCode() (return this._areaCode;}
|
||
get number() (return this._number;}
|
||
}
|
||
```
|
||
|
||
### **Решение**
|
||
Переместите все фичи из описанного класса в другой.
|
||
```javascript
|
||
class Person {
|
||
get officeAreaCode() {return this._officeAreaCode;}
|
||
get officeNumber() {return this._officeNumber;}
|
||
}
|
||
```
|
||
|
||
### **Причины рефакторинга**
|
||
|
||
Часто этот рефакторинг оказывается следствием недавнего «переселения» части фич класса в другие, после чего от исходного класса мало что осталось.
|
||
|
||
### **Достоинства**
|
||
- Меньше бесполезных классов — больше свободной оперативной памяти, в том числе, и у вас в голове
|
||
|
||
|
||
### **Порядок рефакторинга**
|
||
1. Создайте в классе-приёмнике публичные поля и методы, которые есть в классе-доноре. Методы должны обращаться к аналогичным методам класса-донора.
|
||
2. Замените все обращения к классу-донору обращениями к полям и методам класса-приёмника.
|
||
3. Удалите исходный класс.
|
||
|
||
|
||
### **Обратный рефакторинг**
|
||
- [[Извлечение класса (Extract Class)]]
|
||
|
||
### **Ссылки**
|
||
- https://refactoring.guru/ru/inline-class
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |