Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Разделение этапа (Split Phase).md
2026-02-23 19:52:05 +03:00

52 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг #методы_рефакторинга
![[Pasted image 20241118090212.png]]
### **Проблема**
Код, который имеет дело с двумя разными задачами
```typescript
const orderData = orderString.split(/\s+/);
const productPrice = priceList[orderData[0].split(-)[1]];
const orderPrice = parseInt(orderData[1]) * productPrice;
```
### **Решение**
Разделить его на отдельные модули
```typescript
const orderRecord = parseOrder(order);
const orderPrice = price(orderRecord, priceList);
function parseOrder(aString) {
const values = aString.split(/\s+/);
return ({
productID: values[0].split(-)[1],
quantity: parseInt(values[1]),
});
}
function price(order, priceList) {
return order.quantity * priceList[order.productID];
}
```
### **Причины рефакторинга**
- Код, который имеет дело с двумя разными задачами
### **Достоинства**
- Если мне нужно будет вносить изменения в программу, мне
придется иметь дело с каждой задачей в отдельности и не потребуется держать их
обе в голове
### **Порядок рефакторинга**
1. Выделите код второй фазы в собственную функцию
2. Введите промежуточную структуру данных как дополнительный аргумент извлекаемой функции
3. Изучите каждый параметр извлеченной второй фазы. Если он используется
в первой фазе, переместите его в промежуточную структуру данных
### **Борется с запахом**
- [[Расходящиеся изменения]]
- [[Стрельба дробью]]
### **Ссылки**
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]