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