2010-04-09 59 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