Я поддерживаю общедоступный API и должен осудить метод.
Существует ли общее правило о том, за сколько месяцев / лет / версий до удаления я должен отказаться от метода?
java
deprecation
deviDave
источник
источник
java.io.StringBufferInputStream
устарело с JDK 1.1 (1997?). Нет хорошего или неправильного ответа на этот вопрос. Это зависит от ваших потребностей для обеспечения обратной совместимости.Ответы:
Как минимум, вы должны хранить устаревшие методы в одной версии, прежде чем удалять их, что кажется довольно очевидным, когда я пишу их. Я не думаю, что есть максимальное время, но если вы никогда не удаляете их, устаревание становится немного бессмысленным.
Основные выпуски версий - хорошее время для удаления устаревших методов. Незначительные выпуски обычно не должны содержать критических изменений. Как отмечает cHao в комментариях, устаревание не обязательно подразумевает, что будет возможное удаление, поэтому, если вы планируете удалить вещи после устаревания, вы должны четко отметить это и дать некоторые рекомендации по срокам.
источник
Это зависит исключительно от того, какие гарантии стабильности вы дали своим пользователям, и какую боль вы хотите причинить своим пользователям.
В идеале ваш API использует semver, так что любое критическое изменение приводит к увеличению номера основной версии. На практике желательно делать это практически никогда. Если ваш API установлен через некоторый менеджер пакетов, вы можете захотеть создать новое имя пакета после критического изменения, чтобы простое обновление не вызывало конфликтов (например,
myapi2 v2.123.4
vsmyapi3 v3.2.1
). Это может быть ненужным, если ваш менеджер пакетов поддерживает более жесткие зависимости версий (например, спецификация зависимостей~v2.120
не включает в себяv3.*
), но у разных имен пакетов есть преимущество, заключающееся в том, что несовместимые версии могут очень легко использоваться рядом. Даже при использовании semver может быть целесообразно иметь период амортизации.Семвер не всегда применим. Тогда важнее сообщить четкую политику стабильности. Например:
Такие политики работают особенно хорошо, когда у вас есть регулярные выпуски, поэтому существует четкий период устаревания, например, один год.
Помимо пометки каких-либо частей API как устаревших, вы должны сделать это устаревание широко известным. Например:
Что касается точного периода выбытия, сначала посмотрите, должны ли вы соблюдать какие-либо контракты на поддержку с вашими пользователями. Такие контракты могут потребовать от вас сохранения совместимости в течение некоторого периода. Если нет, рассмотрите любое последующее воздействие. Попробуйте изменить менее быстро, чем нижестоящие пользователи, чтобы они могли самостоятельно пройти цикл устаревания. Нижестоящим пользователям потребуется некоторое время, чтобы адаптироваться к вашим изменениям, поэтому у вас никогда не должно быть периода устаревания меньше месяца.
источник
Ideally, your API uses semver so that any breaking change causes the major version number to be incremented. In practice, it is desirable to do this almost never.
Какой смысл использовать semver для обозначения критических изменений, если вы следите за этим, говоря, что никогда не должны вводить новую основную версию?В идеале вам следует подождать, пока никто не использует устаревший метод. Учитывая, что вы используете общедоступный API, это легко отследить, но вы можете ждать очень долго.
в 2015 году у Google была похожая проблема с API stlport в их ОС Android. Они устарели и хотели удалить его, но тонны приложений все еще использовали его. Они нашли умное решение:
По сути, они добавили 8-секундный режим сна () во время загрузки любого приложения, которое все еще использовало API с соответствующим сообщением журнала для разработчиков. Месяц спустя они удвоили его до 16 секунд. затем еще месяц спустя они могли безопасно удалить интерфейс API, потому что никто не остался с ним.
Это может быть очень эффективным способом сделать это. Единственная реальная проблема - если ваш API очень старый и активно использует потребителей, которые больше не поддерживаются. К сожалению, вы, вероятно, не сможете исправить таких потребителей самостоятельно, но на этом этапе вы не сможете сделать гораздо больше, чем просто удалить метод и сломать потребителя.
источник
Минимальное время предоставления устаревших методов зависит от циклов разработки программ с использованием вашего API. Как приблизительная цифра, 1 год должно быть достаточно.
Что касается максимального времени, прежде чем вы должны удалить устаревшие методы, я бы сказал, что такой вещи не существует. Независимо от того, как долго вы ждете, удаление устаревшего метода всегда что-то сломает. Некоторые программы, использующие устаревший API, активно не поддерживаются, и нарушение совместимости будет означать конец жизни таких программ.
Я предлагаю вам удалить устаревшие методы, когда вы получаете что-то от удаления :
Удаление устаревших методов только потому, что они устарели в течение X месяцев / лет или потому, что вы выпускаете новую версию, означает произвольное нарушение совместимости без уважительной причины.
источник
Сначала вы должны подумать, хотите ли вы устареть или устареть.
Устаревшие должны использоваться для методов, которые в некотором роде вредны: безопасность, производительность, неправильные результаты. Вы хотите избавиться от них сравнительно быстро, не более 2-х основных версий и уйти к 3-й. Для достаточно серьезных проблем, устаревшие могут быть удалены в следующей минорной версии.
Устаревшие - для вещей, которые по какой-то причине менее полезны, например, возвращают меньше информации или не работают, не включают столько опций и так далее. Они могут зависать бесконечно, но должны присутствовать как минимум в следующей основной версии.
источник
Ответ зависит от того, какую услугу вы предоставляете своим клиентам.
С одной стороны, в Windows.h есть ошибки эпохи Win 3.1, которые распространялись в течение двух десятилетий, потому что Microsoft очень сильно верила в обратную совместимость.
На другом конце спектра многие веб-приложения удаляют функции, даже не предоставляя предупреждения об устаревании.
То, сколько ваши клиенты платят за ваше программное обеспечение, часто имеет значение, равно как и их направление работы. Исследователи, как правило, более охотно принимают амортизацию как часть прогресса, чем, скажем, банкиры или ФАУ.
Я работал в компании, занимающейся разработкой программного обеспечения для внутреннего использования. Я поддерживал многие группы на протяжении многих лет. У одной группы был менталитет «никогда не удаляй никакую особенность». Им нужна была возможность вернуться к файлам 5-10 лет назад и провести анализ по ним в слишком сжатые сроки, чтобы разработчики могли вернуть функции обратно. Позиция одной группы заключалась в том, чтобы «убедиться, что все замечания устарели в примечаниях к исправлению, поэтому мы могу найти их позже. " В середине у нас была одна группа, правило которой было «Не рекомендуется использовать функции как минимум для 1 версии с напечатанным предупреждением, если они используются перед их удалением». У этой группы был набор тестов, который охватывал нужные им функции. Всякий раз, когда мы выпускали новую версию, они быстро запускали свой набор тестов, чтобы проверить, не мешает ли им какая-либо из устаревших версий.
источник
Зачем тебе это нужно? Это потому, что есть новый блестящий способ сделать что-то, поэтому старый метод сейчас не рекомендуется, но все еще работает нормально? Или старый метод на самом деле должен пойти, потому что вещи в корне изменились?
Если старый метод не вызывает каких-либо реальных проблем, и может остаться, то он может также. Если не сломано, не чини. Вы действительно должны удалить это? Может быть, пометить его как устаревший и включить примечание в документацию о том, что другой метод может быть более эффективным, или что-то еще, но, вероятно, хорошо оставить его на месте.
Если старый метод действительно нужен, потому что он вызывает у вас проблемы с обслуживанием или просто не имеет смысла из-за других изменений, то следите за его использованием и четко сообщайте об устаревании клиентам. Дайте им четкую дату, после которой метод будет удален. (В идеале, не удаляйте его сразу в эту дату: подождите, пока никто не использует его, прежде чем фактически удалить его. Может потребоваться, чтобы он пошел раньше, если это действительно вызывает проблемы, но, по крайней мере, дождитесь, пока использование не прекратит маленький.)
Если старый метод вызывает проблемы с безопасностью, вам, возможно, придется двигаться быстрее, возможно, даже удаляя его без предупреждения, но вы должны задокументировать это изменение где-то очень заметным, а также вернуть разумные сообщения клиентам, которые пытаются использовать старый метод.
(Вторые два пункта маркера хорошо освещены в других ответах, но я думаю, что первый является новым.)
источник
Для публичного проекта удалите его только тогда и только тогда, когда вам это нужно.
Когда вы делаете ненужное удаление API, вы стоите денег для компаний и подрядчиков таким образом, что вы даже не можете рассчитать из-за дорогого оттока.
Хотите, чтобы компании и независимые программисты прекратили использовать ваш проект? Разбивайте их вещи достаточно раз, когда вам не нужно, и вы быстро окажетесь в этой лодке.
deprecation != eventual_removal
, Если API опасен, вы удалите его. Если он просто старый, оставьте его и запишите его замену.источник