我们正在开发医院信息系统软件。该项目将针对不同的医院,并包含不同的用例。但是很多部分都是一样的。因此,我们将使用源代码管理的分支机制。如果我们在一家医院发现了一个bug,我们怎么知道其他分支机构有没有同样的bug。
IMAGE http://img85.imageshack.us/img85/5074/version.png
我们附上的图片中的数字显示了每个医院的软件。
你对这个问题有解决方案吗?
哪种源码控制(SVN,Git,Hg)适合解决这个问题?
谢谢。!
发布于 2010-05-24 17:06:28
好吧,这不是一个真正的VCS问题,这是首要的和架构的问题--你如何构建和构建你的应用程序,这样你就可以根据需要向每家医院交付特定的用例,同时能够按照你的建议修复常见代码中的bug。
我认为可以肯定地说,如果你遵循你的图像中建议的模型,你将无法持续有效地做到这一点。您最终将得到许多不同的、离散的应用程序,这些应用程序必须单独维护,即使它们有时来自一组公共代码。
很难做出更好的概括,但我会这样想:
首先,您需要一个核心应用程序(或一组应用程序或一组应用程序库),这些应用程序将构成任何已交付系统的基础,从而形成一组单独维护的代码(尽管此核心本身可能包括外部库)。
然后,您可以为您的自定义应用程序(每个医院实例)提供多个选项。您可以通过以下方式定义可用的功能:
的核心代码
然而,可能的情况是,尽管每家医院的用例总数不同,但单个用例在许多实例中是通用的,因此您需要瞄准模块化系统,即从公共核心开始,可以通过组合以及任何其他方式进行扩展和配置的系统。
这意味着您可能想要广泛使用控制反转和依赖注入,以便在通用框架中提供灵活性。您希望查看可扩展性框架(我使用.NET,因此我将关注托管可扩展性框架- MEF),这些框架允许您在运行时而不是在编译时“组装”应用程序。
您还需要注意如何部署-特别是如何更新-您的应用程序,在这一点上您是对的,您将需要拥有正确的版本控制和正确的构建环境。
一旦你知道如何构建你的应用程序,你就可以看看你的版本控制系统-- @VonC说的关键特性是能够将共享项目中的代码包含到多个可交付项目中。
如果是我,现在,我可能会有一个核心(它本身可能是多个项目/解决方案),然后每个医院有一个项目/解决方案,但我的目标是在每个医院的项目中尽可能少地编写代码-理想情况下,只有足够的框架来定义特定于实例的配置和UI定制
至于使用哪一种...如果你是微软的用户,那就仔细看看TFS吧,拥有一个良好的集成环境会带来相当大的生产力提升。
除此之外(在任何情况下),DVCS (Mercurial、Git、Bazaar等)在我看来,随着它们的成熟,它们似乎正在获得比更传统的系统更多的优势。我认为SVN是一个很好的工具(我使用它并且它很有效),我认为你需要一个中央存储库来进行这种开发--尤其是因为你需要一个触发你的持续集成服务器的地方--但是你可以用DVCS实现同样的事情,并且能够在不“破坏构建”的情况下进行频繁的本地、增量、提交,DVCS给你的灵活性意味着,如果你现在有选择,那么这几乎肯定是可行的方法(但你需要确保你建立了良好的实践,确保代码被提前推送到核心存储库)。
我认为,仅仅从VCS问题来看,仍然有很多问题需要解决--但在你知道如何构建你交付的解决方案之前,你不可能得到有用的细节。
发布于 2010-05-24 00:35:03
您提到的所有这些VCS (版本控制系统)都与“共享组件”的概念兼容,它允许您定义一个公共的共享和部署的代码库,以及每个分支中的一些专门化:
考虑到发布管理过程的分布式方面,DVCS会更合适。
如果bug位于公共代码库中,您可以在其他分支中快速查看以下情况:
https://stackoverflow.com/questions/2892268
复制相似问题