Глянь мой новый курс по Git! Привет! Глянь мой новый курс по Git! Привет! Глянь мой новый курс по Git на GitByBit.com! Привет! Хочешь круто подтянуть Git? Глянь мой новый курс на GitByBit.com!

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

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

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

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

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

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

Лечение

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

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

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

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

Выигрыш

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

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

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

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