Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Подстановка алгоритма (Substitute Algorithm).md
2026-02-23 19:52:05 +03:00

3.5 KiB
Raw Permalink Blame History

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

!Pasted image 20250128084409.png

Проблема

Вы хотите заменить существующий алгоритм другим

function foundPerson(people) {
  for(let i = 0; i < people.length; i++) {
    if (people[i] === Don) {
      return Don;
    }
    if (people[i] === John) {
      return John;
    }
    if (people[i] === Kent) {
      return Kent;
    }
  }
  return “”;
}

Решение

Замените тело метода, реализующего старый алгоритм, новым алгоритмом

function foundPerson(people) {
  const candidates = [Don, John, Kent];
  return people.find(p => candidates.includes(p)) || '';
}

Причины рефакторинга

  1. Поэтапный рефакторинг — не единственный способ улучшить программу. Иногда вы сталкиваетесь с таким нагромождением проблем в методе, что его гораздо проще переписать заново. С другой стороны, вы могли найти алгоритм, который куда проще и эффективнее текущего. В этом случае надо просто заменить старый алгоритм новым.
  2. С течением времени ваш алгоритм может оказаться включен в набор известной библиотеки или фреймворка, и вы можете пожелать избавиться от собственной реализации, чтобы облегчить себе поддержку программы.
  3. Требования к работе программы могут измениться настолько сильно, что старый алгоритм невозможно просто «допилить» до соответствия им.

Порядок рефакторинга

  1. Убедитесь, что вы по максимуму упростили текущий алгоритм. Перенесите несущественный код в другие методы с помощью извлечения метода. Чем меньше «движущихся частей» останется в исходном алгоритме, тем проще будет его заменить.
  2. Создайте ваш новый алгоритм в новом методе. Замените старый алгоритм новым и запустите тесты программы.
  3. Если результаты не сходятся, верните старую реализацию и сравните результаты. Выясните, почему результаты не совпадают. Нередко, причиной могут быть ошибки в старом алгоритме, но с большей вероятностью не работает что-то в новом.
  4. Когда все тесты начнут проходить, окончательно удалите старый алгоритм.

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

Ссылки