#рефакторинг #методы_рефакторинга ![[Pasted image 20250127092118.png]] **Проблема** Часто на ранних стадиях разработки принимается решение о представлении простых фактов в виде простых элементов данных, таких как числа или строки. По мере развития программы простые вещи перестают быть столь простыми — так, некоторое время телефонный номер может быть представлен в виде строки, но позже ему потребуется специальное поведение для форматирования, извлечения кода города и тому подобного. ```javascript orders.filter(о => "high" === о.priority || "rush" === о.priority) ; ``` ### **Решение** ```javascript orders.filter(о => о.priority.higherThan(new Priority('’normal"))) ``` ### **Причины рефакторинга** ### **Достоинства** - Выполняется самоинкапсуляция поля ### **Порядок рефакторинга** 1. Примените рефакторинг [[Инкапсуляция переменной (Encapsulate Variable)]] 2. Создайте простой класс-значение для данных. Он должен принимать существующее значение в конструкторе и предоставлять для этого значения метод доступа 3. Измените метод установки значения таким образом, чтобы он создавал новый экземпляр класса-значения и сохранял его в поле, изменяя тип поля, если таковое имеется. 4. Измените метод получения значения таким образом, чтобы он возвращал результат вызова метода получения значения нового класса. ### **Ссылки** - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]