处理类似代码的优雅方式

Elegant way of handling similar code

本文关键字:方式 代码 处理      更新时间:2023-10-16

我有一个运行良好的软件项目。现在,这个项目必须进行调整,以建立一个新的但相关的系统。有什么策略可以保持这两个代码的良好组织?它们的代码库大约90%相同,但有许多功能需要稍作调整。

我想到了以下几点:

  1. git存储库中的不同分支:对两个项目的完美控制,但必须分别对每个分支进行常见的更改
  2. 通过C++杂注(#ifdef Project1…)建模不同的程序模式:这使更改保持在本地,但使代码难以读取

我对这些解决方案不太满意。有更好的方法吗?

我们有同样的问题,下面是我们解决它的方法:

  • 我们的git回购只有一个分支机构
  • 除了常见的文件外,根据配置,我们还有不同的文件:access_for_config1.cpp、access_for_configuration2.cpp
  • 我们使用设计模式,如工厂来为公共零件抽象特定零件
  • 对于常见文件上非常特定的小部件,我们根据配置有一个#ifdef部分
  • 根据每个配置,我们在makefile中有不同的规则:对于一个配置,我们编译公共文件+特定文件,并设置正确的标志。此外,在办公室使用eclipse,我们还定义了不同的构建配置,以允许正确的高亮显示

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

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

希望它的答案能帮助你

有什么策略可以保持这两个代码的良好组织?他们将有一个大约90%相同的代码库


这并不完全是你需要的,但要确保你知道它

Submodules 允许将外部存储库嵌入到源树的专用子目录中,始终指向特定提交。


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

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