37 lines
2.0 KiB
Markdown
37 lines
2.0 KiB
Markdown
#рефакторинг #методы_рефакторинга
|
||
|
||
![[Pasted image 20241118084738.png]]
|
||
|
||
### **Проблема**
|
||
Программное обеспечение часто включает передачу данных в программы,
|
||
которые вычисляют на их основе различную производную информацию
|
||
```typescript
|
||
function base(aReading) {...}
|
||
function taxableCharge(aReading) {...}
|
||
```
|
||
|
||
### **Решение**
|
||
Использовать функцию преобразования данных, которая принимает исходные данные в качестве входных и вычисляет все производные значения, помещая каждое из них в качестве поля в выходные данные
|
||
```typescript
|
||
function enrichReading(argReading) {
|
||
const aReading = _.cloneDeep(argReading);
|
||
aReading.baseCharge = base(aReading);
|
||
aReading.taxableCharge = taxableCharge(aReading);
|
||
return aReading;
|
||
}
|
||
```
|
||
|
||
### **Причины рефакторинга**
|
||
- Избежание дублирования логики вычислений.
|
||
|
||
### **Достоинства**
|
||
- Данные находятся в постоянном место, где их можно найти и обновить, чтобы избежать дублирования логики
|
||
|
||
### **Порядок рефакторинга**
|
||
1. Создайте функцию преобразования, которая принимает преобразуемую запись и возвращает те же значения, что и исходные
|
||
2. Выберите некоторую логику и переместите ее тело в функцию преобразования,
|
||
чтобы создать новое поле в записи. Измените код клиента для обращения
|
||
к новому полю
|
||
|
||
### **Ссылки**
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |