SemVer:新功能可以被认为是重大改变吗?

SemVer: can new functionality be considered breaking change?

考虑一个定义了 class A 的库,它具有多种方法(A1、A2、...),版本为 1.0.0(语义版本控制)

现在假设我向 A 对象添加了一个新方法(方法 Ab)。这是次要版本吗?因为它增加了功能,所以它不应该是一个破坏性的变化。 但是,如果使用该库的人声明了 class A 扩展 class B,并且 B 定义了一个与新方法具有相同签名的方法 Ab,那么现在代码将无法编译,因为它需要覆盖声明(在 Scala 和 Java 中)。

那么,这是一个重大变化吗?

首先,将 public 方法添加到 class 通常并不是语义版本控制的重大变化。然而,删除 public 方法将是一个明显的重大变化。

如果您提供一个 Java 库并且您 添加 一个方法到 interface,这个 一个重大的变化,因为其他人必须改变/扩展他们的代码。

如果你添加一个public方法到一个class,这只会是一个问题,如果这个class是不是最终的,所以其他人可以扩展它并覆盖方法。

所以我认为最好的方法是将class声明为final,这样方法重写的问题永远不会发生。您也可以保留主要更新,只增加次要更新。向接口添加方法将是一项重大更改,因此您应该增加主要版本。