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