2009-10-19 38 views
2

我正在处理一个正在被许多人使用的项目,我不知道。我们在降低CheckStyle警告方面做了相当不错的工作,并且事情是低的,因为它不会破坏二进制兼容性。清理代码中断二进制兼容性

其余警告的大部分是由常量(公共静态最终)缺少最后的关键字引起的。常量的命名清楚地表明开发者希望他们只能被读取,但他们根本没有最终定义它们。

除非开发人员正在编写一些使用这种监督的非常糟糕的代码,否则他们的代码不会因为添加它们而中断。

当前的版本号是1.2.1。你会应用更改并转到2.0,或应用它并将其推出为1.3。看起来像一个非常小的变化,需要一个完整的2.0。

我该怎么办?

+0

“除非开发人员正在编写一些利用这种监督的非常糟糕的代码” - 或者也许是为了解决设计不佳的API? – 2009-10-19 19:26:50

+0

@mmyers:我想知道你是如何推断出它与java相关的: - ? – OscarRyz 2009-10-19 19:34:47

+3

@Oscar Reyes:命名另一种具有常量“final”关键字的语言。 – Powerlord 2009-10-19 19:41:39

回答

3

我相信你已经知道这一点,但我怀疑它必须归结为“这是一个安全/简单/无忧”升级?

  • 点释放被认为是安全和例行的。它们应该完全由某些项目中的错误修复组成。如果其他项目不太可能导致问题,则其他项目将包含新功能。
  • 新发行的主要版本包含可能需要适应发展变化
  • 新的主要X.0版本发布被认为是由经验丰富的用户高度怀疑:-)

我想这也取决于如何密切你要到下一个主要版本发布。如果很快,不要冒险出现问题点。你总是可以做一个安全点的释放和阿尔法主要版本,但如果下一个主要版本是在未来的出路,这可能是奇怪...

0

除非开发商在写一些非常可怕的代码,利用这种疏忽,如果我们添加它们,它们的代码不会中断。

像创建以前非最终类将不再工作的子类?

我觉得应该是2.0,并且你应该保持支持1.x的系列

另外这里是关于API的一个有趣的视频:“How to design a good API and why it matters”由Joshua布洛赫的创造者用Java这样的核心库和现在的工作谷歌上

+1

这不是类,它是常数缺失的最后。 – 2009-10-19 22:58:54

+0

您可以制止对这些静态属性的修改。例如,你可能会弄坏这样的东西:'if(YourClass.intField ++> 1){...' – OscarRyz 2009-10-19 23:13:47

+0

明显。但不是重点。 – 2009-10-20 06:07:57

2

我说他们。如果你是一个变异的静态,那么你必须知道你做错了。但是,您可能希望将其分成不同的版本,以便客户有机会(无论他们是否愿意)平稳升级,而不是陷入恐慌,因为他们需要一些其他无关的修复。

4

在我看来,像这样可能破坏二进制兼容性的更改应该暂时关闭,直到主要版本发布。也就是说,您的问题不应该是“我应该使用哪个版本号”,而是“我应该在什么时候进行这些更改”。

如果您完全致力于实现二进制兼容性,则应推迟这些更改,直到包含显着改进的版本证明升级的成本为止。例如,KDE项目在主要版本上强制实施二进制兼容性要求。这意味着在该版本的生命周期内的任何改进都不能破坏针对旧版本编译的应用程序。因此希望清理代码的开发人员必须等到下一个主要版本。

一旦你准备发布一个主要的发布版本以及其所有的新功能,那就继续做出你觉得有必要的二进制兼容性改变吧,如果有什么事情发生,那就不会那么让人意外了。

如果你想变得聪明,你可以实现一个预处理器并且编译两次代码,一次是最后一次,一次没有。这可以作为真正决赛的垫脚石,但同时维护成本会很高。