Friend spotlight!
Whimsical Animations course
Friend spotlight!
NEW Whimsical Animations course
Friend spotlight! NEW Whimsical Animations course
huge discount only this week
Friend spotlight! Want to make your project stand out? NEW Whimsical Animations course huge discount only this week

Завистливые функции

Также известен как: Feature Envy

Симптомы и признаки

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

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

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

Лечение

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

  • Если метод явно следует перенести в другое место, примените перемещение метода.

  • Если только часть метода обращается к данным другого объекта, примените извлечение метода к этой части.

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

Выигрыш

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

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

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

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