2

我们开发了一个弹性组件,现在它被多个 Web 应用程序使用。我们发现一些回调是旧的并且它们有错误的参数。例如,当它们用于设置某些参数时,它们会使用一个对象,而当它们获取相同的参数时,它们会使用另一个对象。我们想让这些函数在设置和获取参数时保持一致。所以我们想开始用新的名字和正确的参数来开发新的 getter 和 setter。无论如何,由于该组件被许多其他应用程序使用,我们不能重命名回调,也不能更改它们的实现,我们可能会遇到其他 Web 应用程序的问题。所以我们想知道是否有某种方法可以弃用 Flash 暴露的回调,这样使用这些方法的人会看到一些警告,并开始用未弃用的版本替换。预先感谢您的回答!

4

2 回答 2

4

一次是 API,始终是 API。

您不能只从 API 中删除内容,否则当前使用这些命令的应用程序将失败。只需添加新的替换 API 并保留旧 API。在文档中声明旧的已弃用,并且有更好的命令。

jQuery 就是一个例子,live()delegate()on(). 虽然已弃用,live()delegate()仍然存在于 1.7 以适应旧 API,特别是对于那些升级了库但使用过时、未维护的插件的人。


你也可以这样做。您可以为旧 API 显示相同的接口,但在它下面,它使用新的 API 实现,但稍作修改。这样,您就不会重复您的代码。

例如,让我们以jQuerydelegate()和. 这些不是这些方法的实际代码,但我追求的是弃用的概念(我想不出除了,和之外的其他弃用示例)。live()on()delegate()live()on()

//the three have different set-ups
.live(event,callback);
.delegate(selector,event,callback);
.on(event,selector,callback);

//to avoid multiple underlying implementations
//you can "map" the old API to use the new API's implementation
//while maintaining the old interface and functionality
live = function(event,callback){
    $(document).on(event,callback);
}
delegate = function(selector,event,callback){
    $(this).on(event,selector,callback);
}

//the new implementation as used by on
on = function(event,selector,callback){
    //implementation
}
于 2012-05-22T11:03:52.343 回答
1

有几点不清楚:

  1. 谁在构建代码的 Flash 端?使用该组件的人,还是他们编译了它却不知道里面有什么?

  2. 一般观众的精明程度如何?

  3. 使用该组件构建的应用程序的一般生命周期是多少。您是否明确说明了您的版本策略?

IMO:( 这只是我的观点,不是绝对的事实,这种方法对于 Linux 开发来说更典型,但对于 Windows 来说却很可怕/不典型)。

现在,如果您的用户正在构建您的代码,我会说直接[Deprecated()]为 2-3 个次要版本发布元,然后将其删除,当然不要将其拖到主要版本发布中。如果您有足够的带宽,最好为旧版本提供一些支持,并可能发布补丁,但改进更为重要。某些策略可能会有所帮助。例如,如果用户接触了测试版产品,他们将更有可能更快地采用更改。

如果您的听众大多是精明的/有良好的社区沟通,那么一个小版本可能就足够了 - 最坏的情况下,旧的兼容版本几乎没有留下。同样,如果你有旧版本的补丁很好,但是你会因为坚持错误的 API 而束缚你的手,一段时间后,由于那个 API,你的用户会认为你的应用程序是过时的垃圾,这会锁定他们使用他们的东西宁愿改变。

只承诺次要版本之间的一致性非常重要。当然,如果您可以保持向后兼容多个版本,那是一件好事,但这是一个奖励而不是要求。虽然从表面上看,使用您产品的其他人可能不愿意采用这种更改,但另一种选择仍然更糟。应该有一些合理的时间,适合您提供支持的平均应用程序生命周期。在它有用之前不会使普通应用程序过时的东西,但所有东西都要适度。

于 2012-05-22T12:28:32.460 回答