Semver при добавлении значений в перечисления
Мы вводим семантическое управление версиями ( http://semver.org/) в наши библиотеки Java.
Как мы должны обрабатывать добавление новых значений enum? Ситуация у нас следующая:
annotations.jar
содержит аннотацию со свойством типаMyEnum
util.jar
имеет аннотированные объекты, используя аннотированные отannotations.jar
wsprovider.jar
использует jaxb-подобную технологию для сериализации аннотированных объектов изutil.jar
в веб-APIwsconsumer.jar
потребляет веб-API, предоставленныйwsprovider.jar
и выполняет переключение в зависимости от значенияMyEnum
изменить его поведение.
Если мы добавим новое значение в MyEnum
Какие части (мажор / минор / патч) различных банок мы должны натолкнуть?
Мне кажется как util.jar
нужно поднять основную версию, потому что API изменился таким образом, что может сломать существующий код.
По той же логике это может привести к серьезному wsprovider.jar
а также wsconsumer.jar
,
Есть ли annotations.jar
нужна большая версия удар?
Я бы сказал, да, потому что перечисления являются закрытым набором значений, поэтому код (например, wsconsumer.jar
) сделать предположение, что, охватывая все значения в перечислении, он охватывает все возможные варианты поведения. Добавление нового значения в перечисление затем нарушает это.
Тем не менее, инстинктивно все это выглядит немного сложным для добавления единственного значения в перечисление, и имеет довольно сильный эффект.
Думаю, это то, к чему нам нужно привыкнуть с semver?
1 ответ
Добавление новых функций, таких как добавление новой константы перечисления, в вашем случае редко нарушает обратную совместимость публичного API. Я полагаю, что наибольший вред, который он может нанести общедоступному API, делает некоторую другую константу перечисления устаревшей, что приведет только к незначительному повышению версии, как указано в SemVer (FAQ: как мне обращаться с устаревшей функциональностью?). Поэтому, возможно, вы захотите пересмотреть, если добавление новой константы enum действительно нарушает существующий код, потому что я не понимаю, как это могло бы произойти.
Что касается ваших зависимостей, есть еще один вопрос с часто задаваемыми вопросами, который может вас заинтересовать: что мне делать, если я обновляю свои собственные зависимости без изменения общедоступного API?,
Следует помнить, что при увеличении основной версии в основном нарушается обратная совместимость общедоступного API, что обычно сопровождается изменением существующего кода, а не добавлением нового фрагмента кода. Еще одна вещь, которую нужно помнить, это то, что у каждой зависимости есть свой публичный API.