Коли застаріти та коли видалити на Java


11

В рамках зусиль, що займаються рефакторингу, або просто постійної розробки, певний метод або, можливо, цілий клас може в деякому сенсі застаріти. Java підтримує @Deprecatedпримітку, щоб вказати, що, мабуть, кращий спосіб обробляти цю функціональність. Я думаю, що це особливо корисно в публічних API, де наслідки видалення частин API можуть бути невідомі. Для непублічного API та проекту, що використовує системи контролю версій (тому видалення в певному сенсі може бути скасовано), коли доцільніше знецінити, а не видалити застарілі елементи (елементи)?

Відповіді:


18

Чи ваш API API для громадськості? Це диктує, чи слід зневажати чи видаляти. Якщо API призначений виключно для вашої користі (тобто використовується лише у вашій компанії), то найкраще просто видалити код, що порушує право. Це набагато чистіше і з часом викличе менше головних болів на технічному обслуговуванні.

Однак якщо API відкритий для загального користування, просто видалення методу може призвести до припинення роботи коду, який використовувався для роботи зі старими версіями вашої бібліотеки. Ось де все заплутано. Нижче наведено деякі рекомендації:

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

6

Можливо, це гарна ідея створити нагадування, коли ви @deprecate клас чи метод. Ви робите це для просування його застарілості. Отож здогадайтеся, скільки часу знадобиться, як вільний час, завдання, коли ви отримаєте, щоб усунути всі посилання. Позначте його як @deprecated та помістіть нагадування у своєму календарі. Коли ви отримаєте нагадування, перевірте. Якщо він більше не використовується, видаліть його. Якщо залишилося кілька посилань, які можна швидко оновити, зробіть це та видаліть елемент. Якщо залишається більш вагома робота, трохи підкажіть своє нагадування.

Зробіть це достатньо разів, і ви виробите відчуття, скільки часу потрібно, щоб позбутися класу чи методу у своїх проектах.


1
+1, але замість вашого календаря, можливо, календар технічного погашення заборгованості команди буде більш підходящим?
Гері Роу

5

IMHO, якщо ви можете переконатися, що ніхто не використовує його і ніколи не буде, просто видаліть його. (Це може бути хитромудро за наявності відображення, або зовнішні компоненти, такі як макроси швидкості - сучасні IDE, такі як IntelliJ, можуть знайти посилання, наприклад, на JSP, але не через рефлексію чи швидкість.)

Якщо є краща альтернатива, але стара все ще використовується в багатьох місцях, і ви зараз не встигаєте перефактурувати весь код клієнта, адекватно @deprecate застарілий клас / метод (з адекватним коментарем про переважна альтернатива).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.