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

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

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

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

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

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

Лікування

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

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

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

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

Виграш

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

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

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

Замучились читати?

Збігайте за подушкою, в нас тут контенту приблизно на 7 годин читання.

Або спробуйте наш новий інтерактивний курс з рефакторингу. Він більш інформативний та набагато цікавіший за банальний тест.

Дізнатися більше...