本篇标题似乎和前一篇内容相互矛盾……当然,如果条件允许的话,你确实不该违背API的约定。但有的时候保证应用程序的每一个组件都向后兼容会导致收益递减。这个原理不仅对API适用,对整个程序也同样适用。
你的另一个选择是无节制的向后兼容并且不再向前发展,这意味着对你的产品判了死刑。
这很好的说明了为什么你不应该漫无目的的给你的程序添加功能。因为总有一天你需要为这些你开发的“尽管没有什么用但加上去很方便”的功能提供向后兼容的支持。这是在添加新功能时需要谨慎考虑的一点——既然这个特性已经存在于你的系统中了,那么你打算永远把它维护下去吗?答案是:你很可能需要。
如果你从没有维护过多人使用的大型系统,你可能对以下两点没有概念:
- 你不支持向后兼容的决定会导致多少用户遭殃。
- 如果持续向后兼容你会把自己搞得多狼狈。
最理想的解决方案是:如果你不想在许许多多的后续版本中支持这些功能,那么当下就不要添加它们。有时候需要丰富的编程经验才能有效地做出这样的决策,但你可以从这个功能的角度思考:“它真的这么实用吗,以至于值得在我未来的三到四年里在它上面话费至少10个小时的开发时间?”
一旦你拥有了一个功能,就意味着维护它的向后兼容性将会是日后的绝大部分工作。