45 lines
2.3 KiB
Markdown
45 lines
2.3 KiB
Markdown
#рефакторинг #методы_рефакторинга
|
||
|
||
![[Pasted image 20241118083219.png]]
|
||
|
||
### **Проблема**
|
||
Когда группы функций, которые тесно взаимодействуют с общими данными
|
||
(обычно передаваемыми в качестве аргументов в вызовы функций), то есть
|
||
возможность сформировать класс
|
||
```typescript
|
||
function base(aReading) {...}
|
||
function taxableCharge(aReading) {...}
|
||
function calculateBaseCharge(aReading) {...}
|
||
```
|
||
|
||
### **Решение**
|
||
Использование класса создает общую среду, в
|
||
которой совместное использование этих функций видно более отчетливо и позволяет упростить вызовы функций внутри объекта путем удаления множества
|
||
аргументов. Кроме того, класс предоставляет возможность получения ссылки
|
||
для передачи такого объекта в другие части системы
|
||
```typescript
|
||
class Reading {
|
||
base() {...}
|
||
taxableCharge() {...}
|
||
calculateBaseCharge() {...}
|
||
}
|
||
```
|
||
|
||
### **Достоинства**
|
||
- Одним из существенных преимуществ применения класса является то, что он позволяет клиентам изменять основные данные объекта при сохранении их согласованности
|
||
|
||
### **Порядок рефакторинга**
|
||
1. Сгруппируйте общие данные для двух функций в структуру
|
||
2. Перенесите каждую функцию, которая использует общую запись в новый класс
|
||
3. Любые аргументы вызова функции, которые являются членами класса, могут
|
||
быть удалены из списка аргументов
|
||
|
||
### **Борется с запахом**
|
||
- [[Длинный список параметров]]
|
||
- [[Стрельба дробью]]
|
||
|
||
### **Ссылки**
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]
|
||
|
||
|