Semver при добавлении значений в перечисления

Мы вводим семантическое управление версиями ( http://semver.org/) в наши библиотеки Java.

Как мы должны обрабатывать добавление новых значений enum? Ситуация у нас следующая:

  • annotations.jar содержит аннотацию со свойством типа MyEnum
  • util.jar имеет аннотированные объекты, используя аннотированные от annotations.jar
  • wsprovider.jar использует jaxb-подобную технологию для сериализации аннотированных объектов из util.jar в веб-API
  • wsconsumer.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.

Другие вопросы по тегам