创建/维护一个与项目无关的大型代码库

时间:2010-04-09 14:21:10

标签: c# .net

为了减少重复并简化测试/调试,我试图找到开发许多项目可以利用的一组库的最佳方法。我想保持单个可执行文件相对较小,并且具有数学,数据库,集合,图形等的共享库,这些库以前分散在几个项目中,并且在许多情况下是重复的(糟糕!)。这个库将在一个SVN仓库中,几个程序员将​​在它上面工作。该库将与使用它的可执行文件一起不断开发。

例如,我希望ProjectA中的代码文件看起来如下所示:

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的ProjectA解决方案文件中,为了开发/调试MyCompany库,我必须添加几个项目(Math,Comms,Graphics)。事情变得混乱,解决方案文件在程序员SVN提交之间很快就会过时。

我只是在寻找一种在SCN存储库中维护大型共享代码库的高级方法。我完全愿意从根本上重新设计我的方法。我正在寻找你所获得的那种温暖模糊的感觉,当你的设计方法被发现并且发展是流动和自然时。

想法?谢谢!

2 个答案:

答案 0 :(得分: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。

当然,当使用这样的大量依赖项时,你应该对所有的lib都进行可靠的单元测试,并确保它们在你构建时运行。

答案 1 :(得分:0)

保持库的大小相对较小。

不要重写主动维护的公共可用库。对于Java,那就是Apache Commons;对于C#,CommonLibraryNET浮现在脑海中。我无法相信,对于集合,代码尚未编写;对于特定的东西,比如公司特定的数据库安装,有一个已经为你设置的库可能会非常好。

如果它处于“持续开发”状态,您可能希望拥有版本号。保持接口一致;如果有的话,不要经常删除功能。为了制定一个理智的策略,不要添加实际上不会被使用的功能,因为它会挤出人们将要寻找的功能。

从您想要使用此组的组中购买;播种一小组基本功能后,让其他组帮助您添加它。使它成为一个更开放的过程,它更有可能catch.f