处理类似代码的优雅方式

时间:2016-03-24 15:09:55

标签: c++ git code-organization pragma

我有一个工作得很好的软件项目。 现在,必须调整此项目以建模一个新的但相关的系统。 有哪些策略可以保持这两个代码组织良好? 它们的代码库大约相差90%,但有许多功能需要稍作调整。

我想到了以下几点:

  1. git-repository中的不同分支:完美控制两个项目,但必须分别在每个分支中进行常见的更改。
  2. 通过C ++编译指示(#ifdef Project1 ...)建模不同的程序模式: 这使得更改保持在本地,但使代码难以阅读。
  3. 我对这些解决方案并不满意。有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

我们遇到同样的问题,以下是解决问题的方法:

  • 我们的git repo只有一个分支
  • 除了常见文件外,我们根据配置提供了不同的文件:access_for_config1.cpp,access_for_config2.cpp,...
  • 我们使用设计模式,如 factory 来抽象公共部分的特定部分
  • 对于常见文件中的小特定部分,我们根据配置
  • a { display: block; text-align: center; position: relative; } a:after { content: ""; width: 100%; position: absolute; left: 0; top: 50%; height: 1px; background: green; z-index: -1; }部分
  • 根据每个配置,我们的makefile中有不同的规则:对于配置,我们编译公共文件+特定文件并设置正确的标志。此外,在办公室使用eclipse时,我们还定义了不同的构建配置,以允许正确的突出显示。

这种方法的优点是保持公共部分始终同步,并且我们正确地隔离每个特定部分。

但是,你必须要小心每个配置的代码。例如,在不同的特定文件中使用相似(但不相同)的代码,只能在一个配置中纠正可能的错误。可以通过将一些代码定义为通用模板或通过重新思考设计来将某些部分放在一起来减少它。

希望它的回答能帮到你

答案 1 :(得分:1)

  

有哪些策略可以保持这两个代码组织良好?它们的代码库大约相同,大约是90%

它不完全是你需要的,但只要确保你知道它。

  

Submodules 允许将外部存储库嵌入到源树的专用子目录 中,总是指着一个特定的提交。

  

git-repository中的不同分支:完美控制两个项目,但必须分别在每个分支中进行常见的更改。

您可以将更改提交到一个分支,然后使用cherry-pick将它们添加到您想要的任何其他分支。