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

2.0 KiB
Raw Permalink Blame History

#рефакторинг #методы_рефакторинга

!Pasted image 20241118090212.png

Проблема

Код, который имеет дело с двумя разными задачами

const orderData = orderString.split(/\s+/);
const productPrice = priceList[orderData[0].split(-)[1]];
const orderPrice = parseInt(orderData[1]) * productPrice;

Решение

Разделить его на отдельные модули

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. Изучите каждый параметр извлеченной второй фазы. Если он используется в первой фазе, переместите его в промежуточную структуру данных

Борется с запахом

Ссылки