具有不同依赖关系的两个实现的最大可重用性

Maximum Reusability for Two Implementations with Different Dependencies

我的任务包括将 API 网关从 Zuul 迁移到 Spring 云网关。目前主要有两个版本:1.0.1.RELEASE和2.0.0.RC1。第一个版本非常基础,我必须手动实现与速率限制、身份验证等相关的过滤器...

虽然第二个版本具有我们需要的所有功能以及完整的 YML 支持。我们公司有一条严格的规定,永远不要使用 beta 或 RC,我们需要网关的第一个版本在几周内投入生产,所以没有足够的时间等待版本 2 的最终发布。

我的组长特别要求我使用 SCG 的 1.0.1 和 2.0.0 版本制作两个版本。您如何实现模块以获得最大的可重用性?我的意思是我希望两个版本之间的切换尽可能简单,并且我希望尽可能多地重用逻辑。我想到的第一件事就是创建两个单独的项目。你怎么看?

据我了解,您希望从版本 1.0.1.RELEASE 轻松过渡到具有某种依赖性的 2.0.0.RC1

我会按如下方式处理:

创建 3 个模块(或项目):

  • api
  • bindings-1
  • bindings-2

api 模块包含 API,您将定义它以访问依赖项的功能。

bindings-1bindings-2 都实现了 api 中定义的内容,但相应地基于版本 1.0.1.RELEASE2.0.0.RC2

您的代码将仅通过 api 使用依赖项。无法直接访问依赖项提供的 类 和方法。我什至不会将依赖项作为编译时依赖项包括在内。然后,您将根据要使用的版本导入 bindings-1bindings-2

单独 api 需要一定的努力。它看起来设计过度了。但是,如果您不这样做,对依赖项的绑定将扩散到您的代码中,并且从一个版本切换到另一个版本将更加困难。

使用专用的 api,您将被迫以独立于版本的方式从 api 中的依赖项中具体化您需要的一切。

我也不会把bindings-1/bindings-2开发成SCM分支。这不像你会合并它们,所以为什么要分支?