Комментарии 4
Рано или поздно пользователям надоест видеть это при каждом запуске — и они сделают как я прошу
Если Ваша библиотека включается в код какого-то вебсервера — они и не увидят никогда.
Вы, всё-таки, смешали в кучу коней и людей. Есть разные типы продуктов, разные типы экосистем.
И если "тут так заведено", то вы с попыткой держать обратную совместимость против толп не попрёте. Вот возьмите Питоновские библиотеки optparse и argparse - естественный вопрос, который возникае "АНАХУА?". Но там так заведено, и при попытке сделать что-то долгосрочное, вас опрокинут с какой-то из библиотек, что вы используете.
Есть коробочные продукты, которые используют Васи из Уренгоя. Тот же MS Word - это же ужас какой-то в плане обратной совместимости. Но это его хлеб. И там, конечно, сделаны адаптеры, XML и т.д. Но задача всё равно чертовски сложна. И Вася никакого сообщения об устаревании не увидит. А если будет видеть, то пользоваться Вордом станет невозможно.
Ну и т.д.
____________________________________________
Ещё есть момент такой: вот у Питона есть определённая репутация, так никто из разумных людей и не пытается делать на нём GUI или что-то долгосрочное и масштабное.
Хотя, конечно, понятно, в чей огород вы кидаете камни.
Да, обратная совместимость — как та самая сволочь с кафедры прикладной казуистики, превращает любую техническую дискуссию в философский трактат о природе времени и неизбежности смерти.
Но вы ведь это и сделали.
В цитате которую вы привели выше - речь идет о том что некоторые изменения в коде - могут привести к последствиям, которые должны бы увеличить версию для того чтобы сказать - "Это новая реализация, предыдущее поведение - сломано".
И по большому счету - это факт. Мы действительно, для какой-нибудь идеальной системы в вакууме, можем сказать - что мы сделали классную архитектуру, в которой изменения в одной части кода не приводят к изменению поведения другой части. Но настоящие продукты - это не всегда что-то идеальное. Сайд эффекты это не что-то редкое (и не всегда это плохо). И уж точно, называть позором, то что не идеальные системы существуют - моветон.
В предыдущей статье - речь о том как сигнализировать, о том что предыдущее поведение - не работает больше ожидаемым образом, а не о том как правильно поддерживать обратную совместимость. А вы говорите о том, что "Не делайте плохо, делайте хорошо и проблем не будет.". Нет - проблемы останутся, они будут безусловно реже и думать о них придется меньше. Но обратная совместимость - ломается. По вашему желанию или без него и не всегда это замечается во время. Только и всего.
Если что - не считаю что, изменение номера версии - нормальная история для того чтобы сказать о том что что-то изменено или сломано.
версионируйте API так, чтобы v2 жил рядом с v1, не мешая ему гнить в покое
Несколько историй про ГИС:
в первой ГИС сразу заложили v1 и v2. Документация к v1 почти отсутствала, да этот и не нужно, ведь есть v2! Пока в один день разработчики не решили расширить объекты api, добавив новые обязательные поля. И при этом решив сохранить совместимость. Правильная реализация: создать v3 и поставить нужные валидаторы на входе, а v2 же недостающие поля заполнять каким-то значением по умолчанию или ничего не делать. Но разработчки пошли по своему пути: для v2 расширили количество полей, но сделать поля обязательными не смогли из-за нарушения обратной совместимости, поэтому полезность "нового" api стало стремиться к нулю, так как у разработчиков нет рычага давления на пользователей, чтобы те переходили на "новое" api;
в другой ГИС просто каждый год выходит новая версия с номером v1. Полностью не совместимая со старым api. На следующий год уже анонсировали, что уберут множество методов для api, единственная альтернатива - вносить данные руками через их веб-интерфейс;
и немного шедевральное, одна и та же функция, которая принимает ДВА разных типов объектов (часть полей совпадает). Внутри функция по "лишним" полям догадаывается, какой именно объект её передали, а потом конвертирует json в… excel. Ну а что, отлаженный парсер excel у разработчиков уже был (раньше система принимала только excel, потом быра расширена до json). Причём в json должны обязательно содержаться все ключи объекта, а если null, то его необходимо записать как пустую строку.

Мифы об обратной совместимости