2010-04-04 55 views
5

我们的团队正在进入规模更大的项目,其中许多都使用内他们几个开源项目。建议保持大型C++项目模块化?

任何建议或最佳做法,以保持库和依赖关系比较模块化,易于升级当他们新版本都出来了?

换一种方式,可以说你做一个程序,它是一个开源项目的一个分支。随着这两个项目的增长,维护和共享内核更新的最简单方法是什么?

咨询关于什么,我只要求请...我不需要“好,你应该这样做,而不是”或“你为什么” ..谢谢。

+0

一家公司我是在结束了持续数年的不支持旧版本的Bugzilla,因为它无法与上游的变化干净地把相对小的变化。没有人有时间把它整理出来。当然,如果我们需要上游的变化,我们会发现时间,但故事的寓意是,如果你分叉,那么你最终会遇到一个“不容易升级”的案例。不要试图避免这种情况发生,而是尽量减少发生的频率。 – 2010-04-04 23:10:10

+0

IMO属于Programmars.SE,但由于它太旧而不允许迁移,我只是投票结束。 – o11c 2015-06-29 04:08:59

回答

6

随着开源的克隆突出你最大头痛中的一个将在同步被保持/根据上游源修补。您可能不在乎新功能,但您肯定需要应用重要的错误修复。

我的建议是,要仔细包裹等在内的项目到共享库中,因此,如果ABI不被打破的变化,你可以或多或少的无痛升级只是那些部分。

一两件事 - 如果你发现在一个开源项目,修正错误 - 不要的修复保留给自己。上游推送补丁。这将使项目更好,并为您节省与新版本合并的日子。

+0

包装+1 - 好主意自己包装所有的依赖关系。 – AshleysBrain 2010-04-04 23:12:00

+0

伟大的建议!谢谢! – Jay 2010-04-05 01:11:41

+0

+1建议推回补丁:即使您不想分享,也可以考虑在之后的补丁中获得社区支持,所以没有理由不这样做。 – 2010-04-05 12:04:16

4

按优先顺序排列

  1. 请对第三方库的一些变化成为可能。尝试解决代码中的局限性。记录您的更改,然后提交补丁。
  2. 如果无法避开其局限性,提交你的变化是一个补丁(这可能是理想主义与一些项目的冰川步伐)。
  3. 如果你不能做任何的那些东西,你记录在一个集中的位置已经改变了什么,这样的穷人做新版本的整合可以找出你正在做的挫折感,如果所做的更改仍然需要。

1和2非常受欢迎(但分别为快速和非常慢),而第三种选择只会导致头痛和错误,因为您的代码库偏离了依赖关系的代码库。在我的代码中,除非必须仔细阅读头文件,否则我甚至没有将第三方代码加载到IDE中。这消除了改变不属于我的东西的诱惑。

至于模块化,这是假设你使用相对稳定的第三方库,只有程序面向公众的接口。仅仅因为你有源代码并不意味着你必须在代码中使用它。这应该允许更新实质上是拖放。现在,这完全是理想主义的,但它是我努力使用的代码所追求的。

+0

感谢您的咨询! – Jay 2010-04-05 01:12:03