【问题标题】:Does adding a parameter to a function definition require a new major version?向函数定义添加参数是否需要新的主要版本?
【发布时间】:2015-10-19 03:11:03
【问题描述】:

使用语义版本控制,如果我的 API 的某个功能发生以下变化:

foo(a, b)
->
foo(a, b, c) //c optional

这需要新的主要版本,还是可以在次要版本下通过?

【问题讨论】:

    标签: semantic-versioning


    【解决方案1】:

    Semantic Versioning 2.0.0 说:

    给定版本号 MAJOR.MINOR.PATCH,增加:

    当您进行不兼容的 API 更改时的主要版本,
    以向后兼容的方式添加功能时的次要版本,并且
    进行向后兼容的错误修复时的 PATCH 版本。

    如果您的额外参数是可选的,则需要更改 MINOR 版本。否则,它需要 MAJOR 版本更改。

    【讨论】:

    • 即使额外的第三个参数是可选的,根据语言,使用三个参数调用函数将改变 API 的行为(异常/忽略 -> 实际执行某些操作)。怎么样?
    • 为了避免大版本发布,你可以设置一个新函数,比如fooFunction(a,b,c)(包含所有代码)并让foo(a,b)调用fooFunction(a,b,null)。但据我所知,如果您的 API 支持可选参数,则调用来自的语言无关紧要。它会起作用的。无论如何,客户都不知道您需要多少参数。因此,这一切都分解为您的 API 如何对可变数量的参数做出反应
    【解决方案2】:

    根据http://semver.org/

    当您进行不兼容的 API 更改时的主要版本,
    以向后兼容的方式添加功能时的次要版本,并且
    进行向后兼容的错误修复时的 PATCH 版本。

    因此,如果您更改功能,那将是一个重大更改。

    但是如果你用另一个签名重载函数并且没有破坏兼容性..这是一个小问题

    【讨论】:

      猜你喜欢
      • 2016-03-17
      • 2019-04-01
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 2019-03-21
      • 1970-01-01
      • 2020-06-10
      相关资源
      最近更新 更多