0

我的组织有一个 .NET 解决方案(C# MVC),我们正在努力尝试保持我们的解决方案可重用但同时可扩展。

我们有 4 个客户

A B C D

这些客户中的每一个都需要一个网站,每个网站都非常相似,比如 90% 相似。因此,我们创建了一个基本模板,其中包括数据层、核心、服务和 Web 层(包括控制器/帮助器/映射/验证)。所有客户端都将使用此模板。客户端不会共享代码的唯一部分将是标记和将应用于该客户端的主题。甚至脚本/基本 css 也将在客户端之间共享。

到目前为止,这已经工作了大约 7 个月,相对较好。

客户端 A 和 B 已部署并投入生产。

我们目前正在开发客户端 C,客户端 D 尚未实现。

在客户端 C 上工作时,客户端 A 和 B 还需要修复错误/功能更改等。但是,由于我们在客户端 C 上工作,模板并不总是“准备好生产”,因此将为客户端 A 和 B 发布未经测试代码的代码. 我们现在一直在直接在客户端 C 中实现大部分功能,以避免对模板进行更改。

当然,一个简单的选择是分支并在分支上工作,但是因为我们被迫使用 TFS,这使得它变得困难。很可能我们只会从那里分支并工作,但是是否有任何其他建议(信息来源)来了解其他人如何解决此问题?

4

1 回答 1

0

根据我的经验,分支是使客户解决方案彼此更加独立的最佳方式。此外,您可以决定何时将更改合并到客户解决方案中,并且不必为客户发布未准备好生产的代码以及错误修复。

直接的方法是将所有项目都包含在一个解决方案中,并为每个客户创建一个分支,其中包含源代码中的完整解决方案。这样,您可以对完整代码进行客户特定的更改。您的源代码树看起来与此类似:

  • 分支1
    • 解决方案
      • 项目一
      • 项目 2
  • 分支2
    • 解决方案
      • 项目一
      • 项目 2

如果您想在共享的基本组件和客户特定代码之间引入更大的分离,您可能会考虑为基本组件创建一个单独的解决方案,并让客户特定的解决方案和项目引用二进制文件。虽然确保基础组件的更改(迟早)以相同的方式合并到客户项目中,但这要复杂得多,并且需要大量的工作。此外,您的灵活性较低,因为您无法对基础组件进行客户特定的更改。仅当您期望有很多客户项目时,我才建议您这样做,因为那样的话,您拥有一组经过测试的基本组件对所有客户都是相同的,这是值得的。您的解决方案树看起来像这样:

  • 基础组件根文件夹
    • 基础组件分支
      • 解决方案
        • 项目
  • 基本组件二进制输出(可能在源代码管理的公共区域中)
  • 客户解决方案根文件夹
    • 分行 1
      • 基本组件文件夹(从基本组件二进制输出分支,如果您想为客户使用组件的新版本,请合并)
      • 解决方案
        • 项目
    • 分支 ...

当然,您可以混合使用这两种方法(所描述的是极端情况)。我希望这有帮助。

于 2013-10-25T11:34:46.770 回答