我有一个运行良好的软件项目。 现在,必须调整该项目以模拟一个新的但相关的系统。 有什么策略可以使这两个代码井井有条? 他们将拥有大约 90% 相同的代码库,但有许多功能需要稍作调整。
我想到了以下几点:
- git-repository 中的不同分支:两个项目的完美控制,但必须分别在每个分支中进行公共(public)更改。
- 通过 C++ 编译指示(#ifdef Project1 ...)对不同的程序模式进行建模: 这会将更改保留在本地,但会使代码难以阅读。
我对这些解决方案不太满意。有没有更好的方法?
最佳答案
我们有同样的问题,这是我们如何解决的:
- 我们的 git 仓库中只有一个分支
- 除了普通文件外,我们根据配置还有不同的文件:access_for_config1.cpp, access_for_config2.cpp, ...
- 我们使用像工厂这样的设计模式来为通用部分抽象特定部分
- 对于常见文件中非常小的特定部分,我们根据配置有一个
#ifdef
部分 - 根据每个配置,我们在 makefile 中有不同的规则:对于一个配置,我们编译普通文件 + 特定文件并设置正确的标志。此外,在办公室使用 eclipse,我们还定义了不同的构建配置,以允许正确突出显示。
这种方法的优点是使公共(public)部分始终保持同步,并且我们正确地隔离了每个特定部分。
但是,您必须小心每个配置中的 not so far 代码。例如,在不同的特定文件中使用相似(但不相同)的代码,可能的错误只能在一种配置中得到纠正。可以通过将一些代码定义为公共(public)模板或重新考虑设计以将某些部分放在公共(public)模板中来减少它
希望回答对你有帮助
关于c++ - 处理相似代码的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203530/