2.3 KiB
2.3 KiB
#рефакторинг #методы_рефакторинга
Проблема
Необходимо инкапсулировать функцию в свой собственный объект
function score(candidate, medicalExam, scoringGuide) {
let result = 0;
let healthLevel = 0;
// long body code
}
Решение
Такой объект в основном строится вокруг единственного метода, запрос и выполнение которого являются предназначением данного объекта.
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
}
}
Причины рефакторинга
Команда обеспечивает большую гибкость, чем простой механизм функции. Команды могут иметь дополнительные операции, такие как отмена действия и возврат к предыдущему состоянию
Недостатки
- Как обычно, эта гибкость имеет свою цену — а именно повышенную сложность
Порядок рефакторинга
- Создайте для функции пустой класс. Дайте ему имя, основанное на функции, с которой вы работаете
- Примените рефакторинг Перенос функции (Move Function) для переноса функции в пустой класс.
- Рассмотрите возможность создания поля для каждого аргумента и перенесите эти аргументы в конструктор.
