大量超前设计
敏捷社区很早提出的理念是“变化是廉价的”,不要过度设计。你可以在之后经常地变动设计。
当用来开发一个控制所有部分的应用程序时,这一理念可能是正确的。但是当你开发的API被设计成外部用户使用,使用场景可变。你的API将成为其他人程序的一部分,改变API对你可能是廉价的,但对于使用这一API的用户改变是昂贵的。
公共API接口的改变是昂贵的
你的API可能由公有部分和私有部分组成。公有部分是与客户端进行交互的部分,这也叫公共接口。
如果你变化公有API可能会面临API使用者不能使用代码的风险,这是使用者不允许的。因此在变更前要及其慎重考虑到这一点。
私有部分是不太敏感的,只要不影响API的功能,你可以用你喜欢的方法改变内部结构。
超前设计
为了最大限度地避免公共API接口发生变化,需要花大量时间分析设计你API的功能,和这一接口的样子。
你可能需要考虑一下几个问题:
- 公共接口的样子
- 接口应该怎样配置
- 接口默认是什么
- 是否有API的抽象层可以选择
事实上,在超前设计阶段,以上的问题都要考虑。
对我的开源API,Butterfly Components,我花了很长时间分析这些API去做什么,和如何获取这些API,也有用户应该有什么样的公共接口。即便这样,我也会花了少量时间改变公共接口来重新适应未来需求,或者改正那些过去没有分析和设计的部分。
当你确实需要改变API应该怎样做
当你发现确实需要要改变公有API接口,一下是你应该考虑的:
- 提供一个替换接口,同时在API中保留老的接口
在老接口上加弃用标志用来提醒用户切换到新接口
当发行几个带弃用接口的版本后你可以考虑将接口完全移除。但一定要给使用你API的用户在他们的空间中进行更新的机会。