Как справиться с устареванием функций в библиотеке?

StackOverflow https://stackoverflow.com/questions/152205

  •  02-07-2019
  •  | 
  •  

Вопрос

Я работаю над библиотекой Java и хотел бы удалить из нее некоторые функции.Моя причина — общедоступный API и очистка дизайна.У некоторых объектов есть сеттеры, но они должны быть неизменяемыми, некоторые функции реализованы лучше/чище в разных методах и т. д.

Я пометил эти методы как устаревшие и хотел бы в конечном итоге удалить их.На данный момент я думаю об их удалении после нескольких спринтов (двухнедельных циклов разработки).

Существуют ли какие-либо «лучшие практики» по удалению избыточного общедоступного кода?

/ЯанусСийм

Это было полезно?

Решение

Установите дату и опубликуйте ее в теге @deprecated.Время, отведенное на удаление, зависит от количества пользователей вашего кода, того, насколько хорошо вы с ними связаны, и причины изменения.

Если у вас тысячи пользователей и вы почти не разговариваете с ними, временные рамки, вероятно, должны быть в диапазоне десятилетий :-)

Если вашими пользователями являются 10 ваших коллег и вы видите их ежедневно, временные рамки могут легко составлять несколько недель.

/**
 * @deprecated
 * This method will be removed after Halloween!
 * @see #newLocationForFunctionality
 */

Другие советы

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

Рэймонд Чен лучше всего отвечает на этот вопрос в своем блоге о Win32 API:

Тем не менее, наш опыт работы в нашей компании по разработке программного обеспечения показывает, что после того, как API написан, мы должны донести его до конца жизненного цикла продукта.Чтобы помочь пользователям в новых версиях, мы обеспечиваем обратную совместимость со старыми командами в новой платформе.

Это зависит от того, как часто перестраивается код.Например, если библиотеку используют 4 приложения и они перестраиваются ежедневно, месяца будет достаточно, чтобы исправить устаревшие вызовы.

Кроме того, если вы используете устаревший тег, предоставьте комментарий о том, какой код заменяет устаревший вызов.

Использовать @устарело ярлык.Прочтите Устаревание API документ для получения дополнительной информации.

После того, как все, кто использует код, сообщат вам, что они очистили свою сторону, начните удалять устаревший код и подождите и посмотрите, не пожалуется ли кто-нибудь, а затем скажите им, чтобы он исправил свой собственный код...

Учитывая, что это библиотека, рассмотрите возможность архивирования версии с устаревшими функциями.Сделайте эту версию доступной как в исходном коде, так и в скомпилированной форме, в качестве резервного решения для тех, кто еще не модернизировал свой код для вашего нового API.(Двоичная форма необходима, потому что даже у вас могут возникнуть проблемы с компиляцией старой версии через несколько лет.) Дайте понять, что эта версия не будет поддерживаться и улучшаться.Пометьте эту версию символическим символом в вашей системе контроля версий.Затем двигайтесь вперед.

Это, безусловно, зависит от того, в каком масштабе используется ваш API и что вы заранее пообещали своим клиентам.

Как описал Винко Врсалович, вам следует ввести дату, когда следует ожидать отказа от функции.

В рабочей среде, если речь идет «просто» о том, чтобы получить более чистый код, я склонен оставлять все на месте даже после даты прекращения поддержки, если это ничего не нарушает.

С другой стороны, в разработке я делаю это немедленно, чтобы быстро разобраться во всем.

Возможно, вас заинтересуют примеры того, как работает устаревание в некоторых других проектах.Например, здесь следует то, что политика в проекте Django по прекращению поддержки функций является:

Второстепенный выпуск может утратить поддержку некоторых функций предыдущих выпусков.Если функция в версии A.B устарела, она продолжит работать в версии A.B+1.В версии A.B+2 использование этой функции вызовет предупреждение PendingDeprecationWarning, но продолжит работать.Версия A.B+3 полностью удалит эту функцию.

жаль, что вы не используете .Net :(

Встроенный Устаревший Атрибут генерирует предупреждения компилятора.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top