演示和实时系统 - 代码版本控制策略

问题描述 投票:0回答:3

我们公司有一个客户端/服务器产品,我们希望将客户端提供给客户进行试用,并针对具有虚拟数据的测试服务器,其中所有用户都默认使用单个虚拟帐户。

总结一下该产品,在现实情况下,服务器将部署在客户的托管环境上,并且客户端应用程序将提供给客户的用户。客户端应用程序使用 SOAP Web 服务与服务器进行通信,我们使用 Mercurial 对客户端和服务器代码库进行版本控制。

作为开发人员,我的兴趣是保持两个代码库的可维护性。我还认为,无论客户端接收虚拟数据还是实时数据,其行为都应该相同。我需要能够将错误修复从实时推送回演示系统。但是,我需要演示版本具有特定行为(例如,在填充有虚拟数据的服务器上使用虚拟帐户)。

为了尝试协调这些利益,我们使用硬编码设置对服务器代码库进行了分支,以仅显示虚拟数据并强制所有登录都使用虚拟帐户。演示服务器部署到云端。然后,我们在安装程序中配置了一个客户端来指向此云服务器实例,并且可供潜在客户下载以试用。

我不确定这是否是最好的方法。有些人建议我应该将演示功能硬编码到实时服务器代码中,并使用隐藏标志对其进行配置 - 这将完全不需要分支代码库。

我的方法背后的原因是,仅针对单个部署将硬编码的演示行为添加到实时代码库中,在我看来就像代码味道一样。分支服务器允许我们继续在“live”分支上开发服务器平台,并将错误修复推送到“demo server”分支,并且Web服务合约和客户端代码库保持不变。

对我来说,这似乎是一个很好的分离,因为在较高的层次上,我相信客户端的行为应该是相同的,无论它是从服务器接收实时数据还是虚拟数据。

我的问题是更广泛的开发社区是否认为这种方法存在问题或者有更好的策略。我的推理有效吗?与实时系统一起管理演示系统(带有虚拟帐户/数据)的代码库的最佳实践是什么?

version-control architecture
3个回答
3
投票

那里没有任何有价值的优势,只有额外的合并努力。如果演示和现场之间的差异并不重要,我建议维护单个代码库。

为了自定义演示行为,我建议如下:

  • 条件代码包含:

    #ifdef DEMO ... #endif
    。您有单个代码库,您有“硬编码”字符串,但它们无法编译为实时版本。

  • 运行时插件,当您有某种界面

    IDataProvider
    并配置演示以使用
    DemoDataProvider
    时。您拥有单一代码库、可插入演示代码,您可以将其从实时分发中排除。


2
投票

我理解你的观点,但分支会迫使你合并分支以集成演示中的更改。 在我的公司中,我们有多个产品使用相同的代码库,一开始是为了节省时间,我们分叉了代码库,但现在我们在分支中集成演化和向后移植演化时遇到了麻烦,因此我们使用相同代码或运行时的编译时差异。 所以我的建议(我不是社区:))是不要分支


0
投票

我不确定您使用的是什么技术,但在 PHP 中我们有环境标志(测试、开发、生产)。使用 env 标志,您可以设置不同的运行时变量来反映系统的行为。您可以将子域(例如 demo.yourdomain.com)绑定到环境,设置它并定义您希望系统的行为方式(例如,从虚拟数据库获取数据)。

http://php.net/manual/en/reserved.variables.environment.php

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.