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