Autumn SALE

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

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

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

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

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

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

Лікування

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

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

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

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

Виграш

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

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

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

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