Version control 如何使用略有不同的业务规则管理多个客户机?

Version control 如何使用略有不同的业务规则管理多个客户机?,version-control,architecture,project-management,customization,Version Control,Architecture,Project Management,Customization,我们为特定的利基行业编写了一个软件包。这个软件包非常成功,我们已经与业界的几个不同的客户签约,他们将我们作为托管解决方案提供商,还有许多其他客户正在敲我们的门。如果我们实现了我们的目标,我们将拥有数百个客户机,每个客户机都有自己的网站托管在我们的服务器上 问题是,每个客户都有自己的小定制和调整,这些定制和调整是他们根据自己当地的情况和条件所需要的,通常(但不总是)基于当地的州或甚至县立法或官僚机构。因此,虽然所有客户端的系统可能有90-95%是相同的,但我们必须构建并支持这些小定制 此外,该系统

我们为特定的利基行业编写了一个软件包。这个软件包非常成功,我们已经与业界的几个不同的客户签约,他们将我们作为托管解决方案提供商,还有许多其他客户正在敲我们的门。如果我们实现了我们的目标,我们将拥有数百个客户机,每个客户机都有自己的网站托管在我们的服务器上

问题是,每个客户都有自己的小定制和调整,这些定制和调整是他们根据自己当地的情况和条件所需要的,通常(但不总是)基于当地的州或甚至县立法或官僚机构。因此,虽然所有客户端的系统可能有90-95%是相同的,但我们必须构建并支持这些小定制

此外,该系统在很大程度上仍在进行中。核心系统上不断出现需要在所有客户机上应用的增强功能和错误修复

我们正在用.NET(ASP,C#)编写代码,MS-SQL2005是我们的数据库服务器,我们使用它作为我们的源代码控制系统。我以前在Vault中使用过分支,如果您只需要保持2或3个分支的同步,那就太棒了——但我们正在考虑维护数百个分支,这是不可想象的

我的问题是:您建议我们如何管理所有这些?

我希望答案会涉及对象体系结构、web服务器体系结构、源代码控制管理、开发团队等。我有一些自己的想法,但我在管理这类东西方面没有实际经验,我非常感谢以前做过这类事情的人


谢谢

这不是您希望通过源代码管理解决的问题,而是在应用程序的体系结构中解决的问题

我会想出一些插件式的架构。为哪个网站使用哪些插件将成为配置问题,而不是源代码控制问题

这允许您将分支等用于它们的用途:在发行版之间(甚至可能超过发行版)并行开发代码。每个插件在源代码系统中成为一个单独的项目(或子项目)。这还允许您将所有插件和主应用程序合并到一个VisualStudio解决方案中,以帮助进行依赖性分析等


松散耦合应用程序中的各个组件是最好的方法。

我建议不要为每个客户维护单独的代码分支。在核心上维护工作代码是一场噩梦

我确实建议您在更改核心时实施并通过自动化测试(例如,单元和功能)覆盖“客户定制”

更新:

我建议在你获得太多客户之前,你需要建立一个系统来创建和更新他们的每个网站。当然,你的参与程度将取决于你目前的收入来源,但你应该有一个目标

例如,当您刚刚注册客户X(希望全部通过网络注册)时,他们的网站将在XX分钟内创建,并向客户发送一封电子邮件,说明准备就绪

您肯定要设置一个持续集成(CI)环境。是一个伟大的工具,而且是免费的

有了它,您就可以在登台环境中检查更新,然后可以在生产实例中应用这些修补程序

底线:一旦你获得了少数客户,你需要开始考虑将你的操作和部署自动化,作为另一个应用程序


更新:这突出了每个客户分支的负面影响。

将应用程序分层。其中一个层包含自定义项,应该能够随时拉出,而不会影响系统的其余部分。调用客户特定代码或使用客户密钥参数化的应用程序级和数据库级“触发器”(引用是因为它们可能或许多不使用实际的数据库触发器)非常有用


Core永远不应该被定制,但您必须将它分层到某个地方,即使它是简单的web过滤。

如前所述,源代码管理听起来并不是解决您问题的好办法。对我来说,使用多租户体系结构的单一代码库似乎更好。通过这种方式,您可以在管理应用程序、服务负载、可伸缩性等方面获得很多好处

我们使用这种方法的产品和我们拥有的一些(很多)核心功能对所有客户端都是相同的,一个或多个客户端使用的自定义模块,在核心a,“定制”是一个简单的工作流引擎,为不同的客户端使用不同的工作流,因此每个客户端都可以获得核心功能,它自己的工作流和一些扩展的模块集,这些模块要么是特定于客户端的,要么是针对多个客户端的

以下是一些让您开始了解多租户体系结构的内容:


我们的软件有非常相似的要求,这些年来我学到了一些东西

首先,这样的定制在短期和长期都会让你付出代价。如果你能控制它,就要进行一些制衡,这样销售和营销部门就不会过分热衷于销售定制产品

我同意其他海报上说不要使用源代码控制来管理这一点。应尽可能将其构建到项目架构中。当我第一次开始为我现在的雇主工作时,源代码管理正被用于此,它很快成为一场噩梦

我们为每个客户机使用单独的数据库,主要是因为对于许多ou