【发布时间】:2013-10-14 09:43:28
【问题描述】:
我们正在向我们的 Java 库引入语义版本控制 (http://semver.org/)。
我们应该如何处理添加新的枚举值?我们的情况如下:
-
annotations.jar包含一个具有MyEnum类型属性的注释 -
util.jar的对象使用来自annotations.jar的注释进行注释 -
wsprovider.jar使用类似 jaxb 的技术将注释对象从util.jar序列化为 Web api -
wsconsumer.jar使用wsprovider.jar提供的web api,并根据MyEnum的值进行切换以改变其行为。
如果我们向MyEnum 添加一个新值,我们应该碰撞各种 jar 的哪些部分(主要/次要/补丁)?
在我看来,util.jar 需要升级主要版本,因为 API 的更改方式可能会破坏现有代码。
按照同样的逻辑,这将波及wsprovider.jar 和wsconsumer.jar 中的一个重大突破。
annotations.jar 需要大版本升级吗?
我会说是,因为枚举是一组封闭的值,因此代码(例如wsconsumer.jar)假设通过覆盖枚举中的所有值,它涵盖了所有可能的行为。向枚举添加一个新值会破坏它。
但是,本能地,将单个值添加到枚举中似乎有点过分,并且具有相当大的连锁效应。
我想这只是我们需要习惯使用 semver 的东西吗?
【问题讨论】: