我们公司有一个客户/服务器产品,我们想把客户端交给客户来试用,而测试服务器的虚拟数据是所有用户默认为一个虚拟帐户的。
总之,在现实世界中,服务器将部署在客户的托管环境中,客户端应用程序将被分发给客户自己的用户。客户端应用程序使用SOAP服务与服务器进行通信,我们使用mercurial对客户端和服务器代码库进行版本控制。
作为一个开发人员,我的兴趣是保持这两个代码库的可维护性。我还认为,无论是接收虚拟数据还是实时数据,客户端的行为都应该是相同的。我需要能够推动错误从现场回到演示系统。不过,我需要演示版本才能有特定的行为(例如,在服务器上使用一个虚拟帐户,该帐户中填充了虚拟数据)。
为了调和这些兴趣,服务器代码库与硬编码设置分支,只显示虚拟数据,并强制所有登录使用虚拟帐户。演示服务器被部署到云端。然后,我们有一个在安装程序中配置为指向这个云服务器实例的客户机,它可以下载给潜在的客户来试用。
我不知道这是否最好的办法。一些人建议我将演示功能硬编码到活动服务器代码中,并让它使用隐藏标志进行配置--这将完全避免对分支代码库的需求。
我的方法背后的理由是,仅仅为了一次部署,将硬编码的演示行为添加到活动代码库中,在我看来就像是一种代码味道。分支服务器允许我们在“活动”分支上继续开发服务器平台,并将bug修复推到“演示服务器”分支,web服务契约和客户端代码库保持不变。
对我来说,这似乎是一个很好的分离,因为在高层次上,我认为客户机的行为应该是相同的,不管它是从服务器接收实时数据还是虚拟数据。
我的问题是,更广泛的开发社区是否认为这种方法存在问题,还是有更好的策略。我的推理有效吗?在一个活动系统旁边管理演示系统(带有虚拟帐户/数据)的代码库的最佳实践是什么?
发布于 2012-11-15 22:50:44
我揭示了您的观点,但是分支将迫使您合并分支以集成演示中的更改。在我的公司,我们有几个产品使用相同的代码库,这是一个节省时间的开始,我们分叉了代码库,但是现在我们很难在分支中集成演化和支持演进,所以我们使用相同代码或运行时的编译时差异。因此,我的建议(我不是社区:)是不要分支。
发布于 2012-11-18 12:50:37
没有任何有价值的优势,只有额外的合并努力。如果演示和实况之间的区别并不重要,我建议保持一个单一的代码库。
为了自定义演示行为,我建议如下:
#ifdef DEMO ... #endif。您有单个代码库,有“硬编码”字符串,但它们不会为实时版本进行编译。IDataProvider和配置演示使用DemoDataProvider。您有单个代码库,可插入演示代码,可以将其排除在实时发行版之外。发布于 2015-07-21 16:44:40
我不知道您使用的是什么技术,但是在PHP中我们有环境标志(测试、开发、生产)。使用env标志,您可以设置不同的运行时变量以反映系统的行为。您可以将子域(例如demo.yourdomain.com)绑定到env,设置它并定义希望系统行为的方式(例如,从虚拟数据库获取数据)。
http://php.net/manual/en/reserved.variables.environment.php
希望能帮上忙。
https://stackoverflow.com/questions/13407520
复制相似问题