2010-04-09 33 views
1

爲了減少重複和簡化測試/調試,我試圖找到開發許多項目可以利用的一組庫的最佳方法。我希望保持單個可執行文件相對較小,併爲數學,數據庫,集合,圖形等共享庫,這些庫以前分散在多個項目中,並且在很多情況下都是重複的(不好的!)。這個庫是在SVN倉庫中的,並且有幾個程序員會在這個倉庫中工作。這個庫將隨着使用它的可執行文件而不斷髮展。創建/維護一個大型項目無關的代碼庫

例如,我想在項目A代碼文件看起來像下面這樣:

using MyCompany.Math.2D; //static 2D math methods 
using MyCompany.Math.3D; //statiC#D math methods 
using MyCompany.Comms.SQL; //static methods for doing simple SQLDB I/O 
using MyCompany.Graphics.BitmapOperations; //static methods that play with bitmaps 

所以在VisualStudio中我的項目A解決方案文件,以便開發/調試MyCompany的圖書館我來補充幾個項目(數學,通信,圖形)。事情變得非常混亂,解決方案文件在程序員SVN提交之間很快就會過時。

我只是尋找一種高級方法來維護SCN存儲庫中的大型共享代碼庫。我完全願意從根本上重新設計我的方法。我正在尋找當你設計的方法是現成的,發展是流暢和自然的時候所獲得的那種溫暖的模糊感覺。

和想法?謝謝!!

+0

您是否將您的解決方案檢查爲SVN? – juharr 2010-04-09 14:26:54

+0

@juharr - 是的,每個項目都有自己的回購,併爲每個圖書館提供回購。 – bufferz 2010-04-09 14:32:28

+0

請參閱:http://stackoverflow.com/questions/1943320/why-shouldnt-i-have-a-single-monolithic-utility-library – 2010-04-09 14:50:59

回答

2

我通常會爲此使用SVN externals

ProjectA 
ProjectA\Libs 
ProjectA\Libs\Maths  <-- svn:external pointing to your Maths repo 
ProjectA\Libs\Comms  <-- svn:external pointing to your Comms repo 
ProjectA\Libs\Graphics <-- svn:external pointing to your Graphics repo 

您可能希望把所有的庫在一個回購 - 這取決於代碼庫有多大,許多不同的人是如何對他們的工作,等

然後生成腳本設置在構建ProjectA之前構建每個libs項目。這樣你就可以得到每個庫的最新承諾版本。如果您希望將庫鎖定到特定的修訂版本,例如,因爲您正在爲發行版添加標籤,並且在簽出較舊版本的ProjectA時始終希望獲得相同版本的庫,則可以在svn:外部URL。

當然,當你使用很多像這樣的依賴時,你應該對你的所有庫有固體單元測試,並確保它們在你構建時運行。

+0

SVN Externals對我來說是一個很好的解決方案。謝謝Orbs! – bufferz 2010-04-14 15:01:14

0

保持庫的大小相對較小。

不要重寫正在積極維護的公共可用庫。對於Java而言,這將是Apache Commons;對於C#,想到CommonLibraryNET。我不能相信對於集合,代碼還沒有寫出來;對於特定的事情,比如公司特定的數據庫安裝,有一個已經爲你設置的庫可能相當不錯。

如果它「正在不斷髮展」,則可能需要版本號。保持接口一致;如果有的話不要經常刪除功能。爲了制定一個健全的政策,不要添加實際上不會使用的功能,因爲它會擠掉人們尋找的功能。

從您希望使用此組的組中獲得買入;在播種一小部分基本功能後,讓其他小組幫助您添加它。使其更加開放,並且更有可能被捕獲.f

相關問題