【问题标题】:What's the best way to manage dependencies between versions of separate components?管理不同组件版本之间依赖关系的最佳方法是什么?
【发布时间】:2009-01-29 09:14:23
【问题描述】:

我在以前的工作中遇到了这个问题,现在又遇到了这个问题,这意味着我要么运气极差,要么不知道有什么工具或组织系统可以解决这个问题。

在这两种情况下,最终产品都由几个独立的组件组成,每个组件都通过约定的接口与其邻居进行通信。问题是随着时间的推移,界面会发生变化,然后相应的组件也必须更新,以使一切正常。

这本身不是问题。问题是当试图返回 SCM 历史时,这使得错误跟踪变得极其困难,因为在某些时候,您尝试调试的组件将不再与系统的其他部分兼容,并且无法针对它们进行测试也无需回滚。

举个例子:

  1. 假设我们有一个客户端/服务器产品,为了简单起见,两者都以完全工作状态开始。我们将这些版本称为 client-1.0 和 server-1.0。
  2. 经过一段时间后,对两者都进行了错误修正和功能。现在我们在 client-1.7 和 server-1.2。
  3. 现在服务端的接口改变了,所以客户端也必须改变:server-2.0和client-1.8。
  4. 现在使用版本 1.9 的客户端,发现了一个错误,我们想测试以前的版本,看看它在哪里停止与服务器一起工作。但是,如果我们回到 1.8 之后,那么服务器也必须恢复。

我给出的示例场景非常简化,但问题归结为:强制执行哪些版本的客户端和服务器相互兼容的最佳方法是什么?

我曾考虑通过文档来做到这一点,但不可避免的是,人性会胜利,有人会忘记为他们或其他组件更新它们。我也想过通过匹配版本来做到这一点(即,当服务器达到 2.0 时,客户端也被提升),但问题是客户端可能有其他与服务器无关的组件依赖项,所以它没有意义全面更新他们的版本。

必须有一些解决方案来解决这个问题。有人对我的研究有什么建议或起点吗?

【问题讨论】:

    标签: dependencies


    【解决方案1】:

    您必须设置一个 历史记录 元标签(引用其他标签的标签)

    可以这样做:

    • 通过 SCM 中的元数据(例如,SVN 会保留有关其元数据及其数据的历史记录)
    • 或通过外部数据库将当前测试和验证为“协同工作”的所有标签的列表注册(前提是该列表也已历史记录)

    该元标签的历史特性确保您能够恢复到以前的连贯标签集以调试系统。

    无论您选择何种解决方案,一旦在生产环境中交付,请不要忘记:

    • 您在该生产环境中没有您的 SCM
    • 因此您必须依靠文本文件来提醒您部署的确切标签。

    该文本文件应在您构建交付包时自动生成(您将部署到生产中的文件集)

    【讨论】:

      【解决方案2】:

      你似乎没有管理依赖的问题,你有一个问题回归。

      接口负责依赖抽象,单元测试和夜间构建负责变更控制。

      如果您需要测试历史版本,您需要能够从源存储库中获取该标记版本,并将其部署在一个复制但完全独立的环境中。因此,这是在 SCM 中定义发布标签元数据并拥有备用/专用硬件的问题。

      【讨论】:

        【解决方案3】:

        我不知道您使用的是什么语言平台,即 Java、C 等。但这里有一些相关信息,让我在 java 中的生活变得轻松。

        有一个名为 Maven 的构建工具用于我的 Java 应用程序。 Maven有明确的依赖配置。例如

        client-1.0 依赖于 server-1.0 - 当您看到 client-1.0 配置时,您会注意到它需要 server-1.0 client-1.7 依赖于 server-1.2 client-1.8 依赖于 server-2.0 client-1.9 依赖于 server-2.0

        您发布的每个版本都将在您的 Maven 存储库中可用。如果我想测试 client-1.7,我将简单地从存储库和配置中获取它,我知道它需要 server-1.2,它在存储库中也可用。我将启动我的应用程序并进行测试。

        【讨论】:

          【解决方案4】:

          使用 RESTful 接口。在真正的 REST 中,客户端学习如何通过服务器返回的响应中的元数据进行导航。通过保持元数据静态,旧客户端可以导航较新的服务器版本。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-20
            • 2011-04-19
            相关资源
            最近更新 更多