我打算扩展&改变一个开源库(LIB_A),它本身由其他库组成,这些库已经过修改以便发布。
我可能会对所有库进行修改。
当添加新功能/破坏错误而不会产生集成问题时,将LIB_A随后导入我的库的最佳方法是什么?
我正在考虑让我的库子类我想要更改的类,并覆盖我想要更改的方法,但无法弄清楚这是否可行。这里的原因是我可能只修改每个类中的两个方法,这样当LIB_A错误被修复时,如果它们不在我的修改方法中 - 没有冲突,我就免费利用这些更新。如果它们采用相同的方法,那就无法解决,我接受了。
如果我只是复制整个LIB_A,那么我将不得不费力地浏览每个带有差异的文件以查看已更改的内容,然后合并更新。必须有一种确定的方法吗?
是一个源存储库(本地或其他),它与相关的签入和差异行为是可接受的方法吗?
由于
编辑:This SO question正在问完全相同的事情......
答案 0 :(得分:1)
问题在于你并不总是只能通过子类化来实现 - 例如当你需要更改密封或私有方法时,更改其他非虚方法或属性等。在这种情况下,除了(1)复制代码并创建自己的版本,(2)修改之外,您无能为力代码使得这些方法/属性是虚拟的和公共的 - 但要确保它不会破坏其他地方的任何东西。
即使您可以将其子类化,并且新版本的库没有触及您覆盖的少数几种方法,您仍然必须完全测试您的更改,因为您的新代码可能依赖于关于新版本更改的某些实现细节。当然,库的供应商会为新版本修改这些方法,但您的版本不会改变。因此,最好的方法是使用旧版本对供应商的新版本的被覆盖方法进行区分,以检测是否需要在自己的版本中更改某些内容。