如何重构API

时间:2011-11-05 18:51:49

标签: python api refactoring

如何处理应该重构的API,而不是破坏使用API​​的客户端?

我遇到的一种可能的解决方案:记录API的重构,向客户提供API的记录,然后可以将重构应用于他们的代码: https://netfiles.uiuc.edu/dig/papers/Thesis.pdf

Python存在这样的事情吗?还有其他解决方案吗?

6 个答案:

答案 0 :(得分:3)

你总是可以提供一个看起来与旧api完全相同的桥接层,但是在你做出重大改变的地方调用新功能。这样老客户端就可以与您的兼容性api通信,而新客户可以使用您的新层和改进层。

答案 1 :(得分:2)

它相当简单,至少在理论上 - 不要删除任何东西,而是弃用旧东西,同时添加新的,改进的东西。请勿删除已弃用的API公开的功能,或模拟它。

您的弃用期(在实际删除弃用的东西之后)应该是短期,长期还是无限期,取决于API是什么,以及有多少人使用它。如果您使用的是有意义的版本号,那么经验法则是永远不会破坏API,除非主要版本号发生变化。

答案 2 :(得分:1)

检查适配器,装饰器和外观图案。

答案 3 :(得分:0)

您可以对API进行安全重构 - 引入参数,重命名,封装参数。但是通过整体规模的重构,没有任何保证。

答案 4 :(得分:0)

要么为旧版客户端保留旧API(大多数情况下这是组织中的问题,正如其他人所指出的那样),或者您通过手动或自动方式主动将所需的更改传播回客户端。如果您控制了对API进行调用的所有代码,则只能执行后者。

Danny Dig的论文讨论了实现这一目标的自动化方法。通常,对于每个API更改,您需要应用确定相应的代码更改到客户端代码。基本上,您需要一个源到源程序转换系统来应用这些更改。

在从传统操作系统到CORBA的C ++代码转换中,你可以看到一个非常壮观的版本(aw,shucks)。在这种情况下,CORBA坚持认为组件具有某种API。传统操作系统也做了,旧组件使用了该API。因此,需要确定将旧API编入CORBA API并将其应用于大型代码库的更改。您可以在Akers, R., Baxter, I., Mehlich, M. , Ellis, B. , Luecke, K., Case Study: Re-engineering C++ Component Models Via Automatic Program Transformation, Information & Software Technology 49(3):275-291 2007.了解相关信息。

好消息是我们(社区)有点不明白该做什么。不太好的消息是技术尚未成为现成的按钮。

答案 5 :(得分:0)

我同意@Mithon @DaeMoohn让版本1成为第2版的adapater

另一个选择是:在Python中不知道,但在Java中,您可以为新版本创建包:

package your.api;

interface AAA{
 //old api
} 

现在,您需要创建版本2:

package you.api.v2;

interface AAA{
 //new api
}