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

2.3 KiB
Raw Blame History

#рефакторинг #методы_рефакторинга

!Pasted image 20250213085811.png

Проблема

Необходимо инкапсулировать функцию в свой собственный объект

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
  }
}

Причины рефакторинга

Команда обеспечивает большую гибкость, чем простой механизм функции. Команды могут иметь дополнительные операции, такие как отмена действия и возврат к предыдущему состоянию

Недостатки

  • Как обычно, эта гибкость имеет свою цену — а именно повышенную сложность

Порядок рефакторинга

  1. Создайте для функции пустой класс. Дайте ему имя, основанное на функции, с которой вы работаете
  2. Примените рефакторинг Перенос функции (Move Function) для переноса функции в пустой класс.
  3. Рассмотрите возможность создания поля для каждого аргумента и перенесите эти аргументы в конструктор.

Обратный рефакторинг

Ссылки