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

Заздрісні функції

Також відомий як: Feature Envy

Симптоми і ознаки

Метод звертається до даних іншого об’єкта частіше, ніж до власних даних.

Причини появи

Цей запах може з’явитися після переміщення якихось полів в клас даних. В цьому випадку операції з даними, можливо, також слід перемістити в цей клас.

Лікування

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

  • Якщо метод явно слід перенести в інше місце, застосуйте переміщення методу.

  • Якщо тільки частина методу звертається до даних іншого об’єкта, застосуйте відокремлення методу до цієї частини.

  • Якщо метод використовує функції декількох інших класів, треба спочатку визначити, в якому класі знаходиться найбільше даних, що використовуються. Потім слід перемістити метод в цей клас разом з іншими даними. Як альтернатива, за допомогою відокремлення методу метод розбивається на декілька частин, і вони розміщуються в різних частинах інших класів.

Виграш

  • Зменшення дублювання коду (якщо код обробки даних переїхав в одне загальне місце).

  • Поліпшення організації коду (оскільки методи роботи з даними знаходяться біля цих даних).

Не варто чіпати, якщо...

  • Бувають випадки, коли поведінка навмисно відділяється від класу, що містить дані. Найчастіше це роблять для того, щоби мати можливість динамічно міняти цю поведінку (патерни Стратегія, Відвідувач і так далі).