Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Замена функции командой (Replace Function with Command).md
2026-02-23 19:52:05 +03:00

51 lines
2.3 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 20250213085811.png]]
### **Проблема**
Необходимо инкапсулировать функцию в свой собственный объект
```typescript
function score(candidate, medicalExam, scoringGuide) {
let result = 0;
let healthLevel = 0;
// long body code
}
```
### **Решение**
Такой объект в основном строится вокруг единственного метода, запрос и выполнение которого являются предназначением данного объекта.
```typescript
class Scorer {
constructor(candidate, medicalExam, scoringGuide) {
this._candidate = candidate;
this._medicalExam = medicalExam;
this._scoringGuide = scoringGuide;
}
execute() {
this._result = 0;
this._healthLevel = 0;
// long body code
}
}
```
### **Причины рефакторинга**
Команда обеспечивает большую гибкость, чем простой механизм функции.
Команды могут иметь дополнительные операции, такие как отмена действия и
возврат к предыдущему состоянию
### **Недостатки**
- Как обычно, эта гибкость имеет свою цену — а именно повышенную сложность
### **Порядок рефакторинга**
1. Создайте для функции пустой класс. Дайте ему имя, основанное на функции, с которой вы работаете
2. Примените рефакторинг [[Перенос функции (Move Function)]] для переноса функции в пустой класс.
3. Рассмотрите возможность создания поля для каждого аргумента и перенесите эти аргументы в конструктор.
### **Обратный рефакторинг**
- [[Замена команды функцией (Replace Command with Function)]]
### **Ссылки**
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]