2010-08-30 98 views
0

我们的代码库有数千行代码和遗留代码。随着时间的推移,不同的开发者会根据其适用性和标准进行编码。其中一个错误实现的代码是包含一个通用头文件,在不同的目录中声明和定义,以排列在不同的二进制文件中,几乎没有区别。例如:链接问题虽然构建不同的二进制文件

DIR1/xxx.h

class ABC{ 

public: 

int init(); 
}; 

DIR1/xxx.cpp

ABC::init() 

同样

DIR2有它自己的拷贝。

的问题是,开发商想保持不同的版本 - 主要是因为他们应该知道什么时候需要下DIR1或DIR2是独立修改各自的调用源代码。

现在,我们如何在二进制代码中链接代码的层次结构是我们的问题。关注的头文件使用相同的包含指令#ifndef .. #define .. #endif进行有条件编译。头文件被存档到lib1.a lib2.a等等。因此,当我们链接我们的库时,如果我们在链接期间需要lib3.a,我们需要确保它链接到第一个:

ldd .. lib1.a lib2.a lib3.a - 所以确切的头文件没有正确链接。请注意,所有.a都有一些编译和链接的其他接口。

其不幸的是,所要求的报头包含共同声明(定义相同的方法,但不同的一点)

我们怎样才能解决这个问题?包括命名空间在我们的代码库中意味着很多改进?有没有更好的方法来做到这一点?

什么是最好的设计,这样的代码库 - 以至于后来开始没有开发人员可以无意中包括这些致命的签名?

请帮

回答

0

有几种方法给开发者之间共享代码:

  1. 让大家共享相同的代码。让团队负责共享代码,如果他们对共享代码进行了更改,请确保这些更改(例如,方法的额外参数)“传播”给使用共享代码的所有应用程序。

    或者,您也可以让“每个人负责的shraed代码,但即使这样,如果共享代码被更改,即做了开发商的改变应该传播这对所有其他应用程序。

    在这种方法中,您仍然可以选择将共享代码作为LIB或DLL分发。

  2. 给每个人自己的共享代码副本。同时,制作共享代码的“中央版本”,并将此“中央版本”作为“中继”。这意味着,无论何时需要更改共享代码,都会改变这个“中央版本”。应用程序中共享代码的所有本地副本都不会更改。

    此外,将“集成管理器”的任务分配给每个应用程序团队的成员,他/她将负责引入新版本的共享代码,从中央版本到本地副本。将不得不作出的更改应用程序,以确保应用程序仍然用新副本的工作,并确保新的共享代码版本的应用程序被重新测试。

0

如果可能的话,你真的需要重新思考基本的做法,如果可以的话就撤消它,如果在所有不同的库项目中都使用了相同的基本头文件和类(或者类的集合),即使有微小的变化,也应该有一些协调Ť软管的变化形成适当的类层次结构,使得单个库(其子类根据需要实现稍微不同的变化)替换多个副本。