#рефакторинг #методы_рефакторинга ![[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]]