Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Удаление аргумента-флага (Remove Flag Argument).md
2026-02-23 19:52:05 +03:00

2.8 KiB
Raw Blame History

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

!Pasted image 20250212084022.png

Проблема

Метод разбит на части, каждая из которых выполняется в зависимости от значения какого-то параметра.

setValue(name: string, value: number): void {
  if (name.equals("height")) {
    height = value;
    return;
  }
  if (name.equals("width")) {
    width = value;
    return;
  } 
}

Решение

Извлеките отдельные части метода в собственные методы и вызывайте их вместо оригинального метода.

setHeight(arg: number): void {
  height = arg;
}
setWidth(arg: number): number {
  width = arg;
}

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

Метод, содержащий варианты выполнения, разросся до грандиозных размеров. В каждой из таких цепочек выполняется нетривиальный код. При этом новые варианты добавляются очень редко.

Достоинства

  • Улучшает читабельность кода. Куда очевидней, что делает метод startEngine() чем setValue("engineEnabled", true).

Когда нельзя применить

  • Не стоит применять замену параметра явными методами, если метод редко меняется, а новые вариации внутри него не добавляются.

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

  1. Для каждого варианта исполнения метода создайте свой метод. Запускайте эти методы в зависимости от значения параметра в основном методе.
  2. Найдите все места, где вызывается оригинальный метод. Подставьте туда вызов одного из новых методов в зависимости от передающегося параметра.
  3. Когда не останется ни одного вызова оригинального метода, его можно будет удалить

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

Обратный рефакторинг

Ссылки