我们的团队正在考虑使用 Team Foundation Server v.11 (2012) 来管理我们的项目。我们目前在电子表格中进行项目管理。我们的团队只为内部客户开发软件,项目之间有很多 dll 共享。我们还使用 SVN 进行源代码版本控制。
我们为应用程序的不同部分提供解决方案:通用库、应用程序库(业务规则等)、内联网网站、互联网网站、Windows 窗体。这是我们的 SVN 结构的样子
SVN
-CommonLibrary (VS Solution)
-Source
-CommonLibrary.Core (VS Project)
-CommonLibrary.Security (VS Project)
-CommonLibrary.Web (VS Project)
-OurCompanyLibrary (VS Solution)
-Libraries (Projects within this solution reference these)
-CommonLibrary.Core.dll
-CommonLibrary.Security.dll
-Source
-OurCompanyLibrary.Application1 (VS Project)
-...
-OurCompanyLibrary.ApplicationN (VS Project)
-OurCompanyIntranet (VS Solution) (MVC framework)
-Libraries (Projects within this solution reference these)
-CommonLibrary.Core.dll
-CommonLibrary.Security.dll
-CommonLibrary.Web.dll
-OurCompanyLibrary.Application1.dll
-Source
-OurCompanyIntranet.Application1 (VS Class Library Project)
-...
-OurCompanyIntranet.ApplicationN (VS Class Library Project)
OurCompanyIntranet.UI (VS Web Project)
-OurCompanyInternet (VS Solution) (MVC framework)
-Libraries (Projects within this solution reference these)
-CommonLibrary.Core.dll
-CommonLibrary.Security.dll
-CommonLibrary.Web.dll
-OurCompanyLibrary.Application1.dll
-Source
-OurCompanyInternet.Application1 (VS Class Library Project)
-...
-OurCompanyInternet.ApplicationN (VS Class Library Project)
-OurCompanyInternet.UI (VS Web Project)
之所以将代码拆分成多个解决方案,是因为我们可以在不同情况下(内网应用、互联网应用、Winform 应用)重用应用程序库。此外,Intranet 和 Internet 解决方案包含多个应用程序。这是我们目前的结构。我不确定这是最好的组织结构,但它对我们有用。
切换到 TFS 的问题是一个团队项目不能在多个 VS 解决方案中包含部分。例如,我们将为 Application1 设置一个 TFS 团队项目,以便我们可以为该应用程序创建一个产品待办事项列表。 Application1 需要对 OurCompanyLibrary、OurCompanyIntranet 和 OurCompanyInternet 进行更改才能完成该应用程序,但是,使用 TFS,Application1 将只有一个 VS 解决方案。
这是我们如何开发应用程序的示例。我们存储在 OurCompanyLibrary VS 解决方案中的所有域模型和业务规则。当我们开发一个应用程序时,称之为Application1,我们首先在OurCompanyLibrary VS Solution下的OurCompanyLibrary.Application1 VS项目中开始创建领域模型和业务规则。一旦开发了域模型,我们就开始在 OurCompanyIntranet 和 OurCompanyInternet VS Solutions 中对事物的 UI 端进行编程。这些解决方案是一个 MVC 风格的网站。 OurCompanyIntranet 包含一个 VS Web 项目 OurCompanyIntranet.UI,其中包含所有 View (.aspx 文件)、css、javasciprt 等。OurCompanyIntranet 还包含由应用程序(在本例中为 OurCompanyIntranet.Application1)分隔的所有模型和 Controller 。在 TFS 中组织它成为一个问题,因为我们想要 Application1 的团队项目,但该应用程序可以跨越多个解决方案,我们不希望通过将相同的 OurCompanyIntranet 和 OurCompanyInternet VS Solutions 添加到源代码控制来在任何地方都有重复的代码。
你会如何在 TFS 中组织它?是否有另一种更有意义的方式来组织我们的代码结构?任何可以引导我们朝着正确方向前进的文章或网站都会有很大帮助。
最佳答案
首先,不要使用多个团队项目,这是每个人在开始时都会犯的一个巨大错误。对于您的团队规模和您开发的内容:一个团队项目就是您所需要的。
当有两个完全不同的团队使用完全不同的方法/流程从事完全不同的项目时,您可以使用两个团队项目。
通过一个团队项目,您仍然可以:
关于解决方案:
项目的每个主要组件都有一个解决方案并不是一件坏事,开发人员可以处理项目的一个专用子集,以最大限度地提高生产力并减少组件之间的耦合。
但是您仍然可以拥有一个引用所有项目的全局解决方案,并且可以在您需要进行影响所有项目的更改时使用该解决方案。拥有全局解决方案也是一种轻松构建整个项目的简单方法。
这里的问题是 关于交叉组件引用 ,如果您开发的一个组件(例如 Application1)需要您开发的另一个组件(例如 OurCompanyLibrary),那么它会在两者之间创建依赖关系,Application1 必须引用 OurCompanyLibrary 的“构建程序集”。
这意味着:
每种方式都有其优点/缺点,只有您可以决定哪种方式最好。
关于具有多个 Visual Studio 解决方案的 TFS 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902951/