2010-08-30 85 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

如果可能的話,你真的需要重新思考基本的做法,如果可以的話就撤消它,如果在所有不同的庫項目中都使用了相同的基本頭文件和類(或者類的集合),即使有微小的變化,也應該有一些協調Ť軟管的變化形成適當的類層次結構,使得單個庫(其子類根據需要實現稍微不同的變化)替換多個副本。