处理类似代码的优雅方式
Elegant way of handling similar code
我有一个运行良好的软件项目。现在,这个项目必须进行调整,以建立一个新的但相关的系统。有什么策略可以保持这两个代码的良好组织?它们的代码库大约90%相同,但有许多功能需要稍作调整。
我想到了以下几点:
- git存储库中的不同分支:对两个项目的完美控制,但必须分别对每个分支进行常见的更改
- 通过C++杂注(#ifdef Project1…)建模不同的程序模式:这使更改保持在本地,但使代码难以读取
我对这些解决方案不太满意。有更好的方法吗?
我们有同样的问题,下面是我们解决它的方法:
- 我们的git回购只有一个分支机构
- 除了常见的文件外,根据配置,我们还有不同的文件:access_for_config1.cpp、access_for_configuration2.cpp
- 我们使用设计模式,如工厂来为公共零件抽象特定零件
- 对于常见文件上非常特定的小部件,我们根据配置有一个
#ifdef
部分 - 根据每个配置,我们在makefile中有不同的规则:对于一个配置,我们编译公共文件+特定文件,并设置正确的标志。此外,在办公室使用eclipse,我们还定义了不同的构建配置,以允许正确的高亮显示
这种方法的优点是保持公共部分始终同步,并且我们正确地隔离每个特定部分。
但是,您必须小心每个配置中的代码段。例如,在不同的特定文件中有相似(但不相同)的代码,可能的错误只能在一个配置中纠正。它可以通过将某段代码定义为通用模板来减少,也可以通过重新设计将某个部分放入通用来减少
希望它的答案能帮助你
有什么策略可以保持这两个代码的良好组织?他们将有一个大约90%相同的代码库
这并不完全是你需要的,但要确保你知道它
Submodules
允许将外部存储库嵌入到源树的专用子目录中,始终指向特定提交。
git存储库中的不同分支:对两个项目的完美控制,但必须分别对每个分支进行常见的更改。
您可以将更改提交到一个分支,然后使用cherry-pick将它们添加到您想要的任何其他分支。
相关文章:
- 在c代码之间共享数据的最佳方式
- 不同/较旧的处理器运行c++代码的方式是否不同
- 如何以静态代码分析友好的方式使用 #define 防护?
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出
- c++ Visual Studio 2015 快捷方式,用于从选择代码中生成功能
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 为什么我的代码在添加不相关的代码行后工作方式不同?
- 在Qt Creator中应用代码更改的快捷方式是什么?
- 如何在运行时以选择性方式排除代码块
- 如何以这种方式在 C++ 中打印 ASCII 代码值
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- 以有效的方式从 Node .js运行 C 或C++代码
- 如何在现有 c++ 代码中以功能方式实现遥测
- 视觉工作室代码远程调试C 类似Netbeans的方式
- 在某些代码中覆盖方法的方式是什么?
- 以简单且更少的代码方式将字符串添加在一起
- 以迭代方式编写递归代码
- 为什么相同的代码在Visual Studio和Dev-C++中运行方式不同
- 为什么这段代码在Mac和Red Hat中的运行方式如此不同
- 我可以以某种方式将 Maple 过程包含在C++代码中吗?