Base/Knowledges/IT/Рефакторинг/Запахи кода/Завистливые функции.md
2026-02-23 19:52:05 +03:00

2.8 KiB
Raw Permalink Blame History

#рефакторинг #запахи_кода

!Pasted image 20241112224937.png

Когда мы делим программы на модули, мы пытаемся разделить код на такие зоны, чтобы максимизировать взаимодействие внутри зоны и минимизировать взаимодействие между зонами. Классический пример — когда функция в одном модуле тратит больше времени на общение с функциями или данными внутри другого модуля, чем в своем собственном. Функция четко хочет быть поближе к данным.

Признаки

  • Метод обращается к данным другого объекта чаще, чем к собственным данным

Причины появления

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

!Pasted image 20241112224947.png

Рефакторинги

То, что изменяется одновременно, нужно хранить в одном месте. Обычно данные и функции, использующие эти данные, также изменяются вместе (хотя бывают исключения).

!Pasted image 20241112224955.png

Результат

  • Уменьшение дублирования кода (если код работы с данными переехал в одно общее место)
  • Улучшение организации кода (так как методы работы с данными находятся возле этих данных)

Не стоит трогать, если...

  • Бывают случаи, когда поведение намеренно отделяется от класса, содержащего данные. Чаще всего это делают для того, чтобы иметь возможность динамически менять это поведение (паттерны СтратегияПосетитель и т. д.).

Ссылки