29

我们的团队正在考虑使用 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)

将代码拆分为多个解决方案的原因是因为我们可以在不同的情况下重用应用程序库(Intranet 应用程序、Internet 应用程序、Winform 应用程序)。此外,Intranet 和 Internet 解决方案包含多个应用程序。这是我们目前的结构。我不确定这是最好的组织结构,但它对我们有用。

切换到 TFS 的问题是一个团队项目不能在多个 VS 解决方案中包含部分。例如,我们将为 Application1 设置一个 TFS 团队项目,以便我们可以为该应用程序创建一个产品 backlog。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,其中包含所有视图(.aspx 文件)、css、javasciprt 等。OurCompanyIntranet 还包含由应用程序分隔的所有模型和控制器(在本例中为 OurCompanyIntranet.Application1)。在 TFS 中组织这个成为一个问题,

你会如何在 TFS 中组织这个?有没有另一种方式我们应该组织我们的代码结构更有意义?任何能引导我们走向正确方向的文章或网站都会有很大帮助。

4

4 回答 4

44

首先,不要使用多个团队项目,这是每个人一开始都会犯的一个巨大错误。对于您的团队规模和您开发的内容:您需要一个团队项目。

当有两个完全不同的人组成的团队,使用完全不同的方法/过程从事一个完全不同的项目时,你会使用两个团队项目。

通过一个团队项目,您仍然可以:

  • 有许多分支(相关或不相关)。
  • 在您需要的最小级别上进行源代码控制管理
  • 使用工作项的区域路径(节点树)将您的项目分成子类别(功能、技术、任何您需要的)。这样你就可以拥有一个大的产品待办事项或专门的待办事项。
  • 关于整个项目或特定区域的总体报告(仍在使用区域路径,但在 Reporting Services 中)
  • 相信我,这是最好的方法,很多人(包括我第一次)犯了使用多个团队项目的错误,之后不得不付出代价。你需要的是一个好的源代码控制层次结构和一个好的区域路径树。

关于解决方案:

每个项目的主要组件都有一个解决方案并不是一件坏事,开发人员可以在项目的专用子集上工作,以最大限度地提高生产力并减少组件之间的耦合。

但是您仍然可以拥有一个引用所有项目的全局解决方案,并且在您需要进行影响所有项目的更改时使用该解决方案。拥有一个全球解决方案也是一种轻松构建整个项目的简单方法。

这里的问题是关于跨组件引用,如果您开发的一个组件(例如 Application1)需要您开发的另一个组件(例如 OurCompanyLibrary),那么它会在两者之间创建依赖关系,并且 Application1 必须引用 OurCompanyLibrary 的“构建程序集”。

这意味着:

  1. 您必须在源代码管理中的某个位置创建一个位置,以存储将被其他人引用的所有组件的构建程序集。维护一个构建周期以按照正确的顺序发布所有内容。

  2. 利用新标准Nuget并设置内部 Nuget 服务器(非常容易做到)并为其他人引用的组件构建自己的 Nuget 包。

  3. 最简单的方法是将所有内部开发的依赖项包含在解决方案中,以确保在需要时构建它们。这很容易做到,但您的 Application1 项目将包含您的大部分 VS 项目。我没有说这是一个好或坏的方式,这是你的电话。有时简单的方法是最好的方法。

每种方式都有其优点/缺点,只有您可以决定哪种方式最好。

于 2012-06-12T08:33:55.427 回答
0

如果这是一个在生产中运行的应用程序,我将对文件夹/解决方案结构进行最小的更改。在构建定义中的 TFS 中,您可以选择多个项目,也可以将多个解决方案放入构建脚本中,如下例所示

如何从单个 TFS 团队构建定义构建 2 个解决方案

于 2012-06-07T01:21:52.483 回答
0

正如您所预测的那样:-

OurCompanyLibrary 将是一个 VS 解决方案。

OurCompanyLibrary.Application1 ... OurCompanyLibrary.ApplicationN 将是该解决方案中的 VS 项目。

OurCompanyLibrary.ApplicationX.dlls 将是 OurCompanyIntranet 和 OurCompanyInternet VS Solutions 中的引用。

我不确定我是否理解你的问题。

OurCompanyLibrary 中的应用程序 VS 项目可以单独构建,生成自己的 dll,然后可以在其他两个解决方案中引用。如果问题是所有应用程序都在一个 VS 团队项目(OurCompanyLibrary)下,那么答案是为每个应用程序创建一个单独的 VS 团队项目 - OurCompanyLibrary1 用于 Application1,OurCompanyLibrary2 用于 Application2 等。然后每个应用程序的开发完全自给自足,与其他人分开。

如果问题是您希望源的不同部分在不同的解决方案中,那么可以通过将项目添加到解决方案来实现。这确实意味着所有这些解决方案都具有所有源代码。我们在我工作的地方有类似的东西:- 我们有一个包含 2 个项目的解决方案 - 我们的通用业务逻辑层和我们的通用数据访问层。我们的每个其他解决方案都包含这些项目。这意味着我们可以编辑任何解决方案的源代码。

我不知道这些对你有没有帮助,但祝你好运!

于 2012-06-05T21:08:06.710 回答
0

如果您想对整个代码库进行集中报告,您应该探索使用一个TeamProject 来托管所有内容的可能性。
然后为了区分不同的组件/部分,您可以在此 TeamProject 中使用单独的区域。
查看这篇非常有趣的文章,尤其是“优点/缺点”部分。

于 2012-06-12T08:54:12.183 回答