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

Запах кода Завистливые функции

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

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

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

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

Лечение

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

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

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

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

Выигрыш

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

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

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

Устали читать?

Сбегайте за подушкой, у нас тут контента на 7 часов чтения.

Или попробуйте наш интерактивный курс. Он гораздо более интересный, чем банальный текст.

Узнать больше...