我应该如何支持并继续开发分叉式应用程序?

问题描述:

我们有一个大型应用程序,运行在大约5个位置。这些位置都没有运行相同版本的应用程序。这使修补和更新非常复杂。我应该如何支持并继续开发分叉式应用程序?

请尝试关注此示例:我们将调用我正在讨论的“应用程序A”的应用程序。现在我们要将应用程序B推出到这些位置之一,并且它必须实现应用程序A.我们必须修改A以接受B的要求。但是,我们的开发版本A(最终每个位置将具有的版本)也必须支持B。这意味着我们必须回退到在需要B的站点上运行的软件的状态,并且将这些变更改为我们的A的开发版本。这也意味着其他4个位置正在实现A的无版本B支持。

所以你可以看到它在控制版本的过程中感到沮丧。如果我们想要支持站点2-5,我们不能使用我们的源代码的开发版本,我们必须回滚到该站点上的特定版本。什么是最好的方法来做到这一点?请记住,我们正在使用Visual Studio 2008和Team Foundation Server。

+2

听起来像经典的“医生,当我伤害做这个!”情况。 – 2009-07-06 17:57:03

我会推荐的第一件事是重构你的应用程序,使其全部使用相同版本的核心产品。

尝试将特定功能逻辑地分解到其自己的模块中,并通过适配器类型模式访问该功能。

+1

谢谢你的术语,约翰。正是我在寻找 - “分叉应用程序”和“适配器模式”。 – Daniel 2009-07-06 18:55:03

约翰指出了一个关键的第一步。在你的代码库内部稳定之前,没有什么可以发生的。

但即使在将应用程序划分为具有定义明确的接口的可重用组件后,仍可能需要维护多个/所有这些组件的多个版本(“分支”),并行开发其版本。这就是分支进来的地方。

我强烈推荐阅读新的TFS Branching Guidance论文。我对先前的修改很批评,但文档团队真的在这里改进了他们的产品。 (部分归功于TFS获得更广泛采用的额外反馈意见......但等于终于关注已建立的SDLC规范,远远早于微软进入市场)

+0

“直到你的代码库内部稳定才能发生任何事情” - 感谢Richard的评论,但那不是我的观点。我的意思是通过某种类型的加载项模型来卸载核心功能并管理其他特定于位置的功能。所以每个人都有相同版本的应用程序X,位置y有y插件,位置z有z插件。 KWIM? – 2009-07-07 11:59:50