API设计:抽象与版本耦合

时间:2010-08-09 20:04:29

标签: c# api versioning

我们有一个需要公开API的桌面应用程序。

有人说:API应该有一个抽象层,因此在未来的版本中实际的实现可能会发生变化。

其他人说:API应该是特定于版本的。因此,使用版本X的API只能使用它。版本X + 1还将部署版本X的dll,以免破坏现有用法。据称,这与.Net或Silverlight等框架的工作方式是一致的。

您有什么看法?

5 个答案:

答案 0 :(得分:2)

您应该考虑的一些问题:

  • 您的用户可能会有什么期望?
  • 您是否可能需要在版本之间进行重大更改?
  • 根据您目前的路线图,在开发过程中维护多个版本的兼容性需要多少费用?

我的意见是,如果可能的话,您应该在版本之间保持API兼容性。微软已经实现了它,主要是使用Office,这就是为什么有很多附加组件,附件和LOB应用程序围绕它们构建的原因。例如,我在Access XP上编写了一个应用程序,该应用程序使用了Excel自动化,并且它在Office 2010中无错误。这就是我所说的兼容性!

答案 1 :(得分:1)

我发现对界面进行版本控制是实现重大变更的有用工具。

您应该尽力在第一时间使用您的API接口。

当您进行重大更改(更改现有签名,因此必须重新编译客户端代码)时,您必须更改界面,并且在执行此操作时可以更改版本。如果您可以避免,那么不间断的更改(例如,将新功能添加到其他类)不应更改版本。

答案 2 :(得分:1)

使用关闭进行修改,打开扩展的想法。如果可能的话,您公开的API的任何部分都不应在将来的版本中更改。 (如果它们的功能相同,则可以修改未曝光的部件)。程序员希望使用API​​并使代码在其生命周期内工作,而不必担心他引用的版本。

考虑到在API的更高版本中,您可能会公开API的每个用户可能想要采用的新功能 - 但他已经有针对旧版API编写的代码。他应该能够在不重写旧代码的情况下插入新部件(假设新部件不依赖于重大变化)。

如果要进行重大更改,则不应删除旧方法,而应将其标记为[Obsolete],并明确说明应如何更新到新API。

答案 3 :(得分:0)

如果您使用Net作为参考,您应该注意到他们采用混合方法,他们使用两者,不要将CLR版本与NET版本混淆。

您应该考虑使用您的应用,以便为您找到答案。

我的资金用于尽可能保持所有版本的API兼容性。

但也有缺点。

此致

答案 4 :(得分:0)

如果您决定采用特定版本,请确保您与用户保持联系。我错过了最后期限六次,我的供应商在不通知我的情况下改变他们的网络服务,不得不争先恐后地提出解决方案