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

Java 具有不同依赖关系的两个实现的最大可重用性,java,spring,dependency-injection,spring-cloud-gateway,Java,Spring,Dependency Injection,Spring Cloud Gateway,我有一项任务,包括将API网关从Zuul迁移到Spring云网关。目前有两个主要版本:1.0.1.RELEASE和2.0.0.RC1。第一个版本非常基本,我必须手动实现与速率限制、身份验证等相关的过滤器 而第二个版本拥有我们所需要的所有功能,并且完全支持YML。我们公司有一条严格的规定,永远不要使用beta版或RC版,我们需要网关的第一个版本在几周内投入生产,因此没有足够的时间等待版本2的最终发布 我的团队负责人特别要求我使用SCG的1.0.1版和2.0.0版制作两个版本。如何实现模块的最大可重

我有一项任务,包括将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-1
bindings-2
都实现了
api
中定义的功能,但基于
1.0.1版本。相应地发布
2.0.0.RC2

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

拥有单独的
api
需要一定的努力。这似乎是过度设计的。但如果不这样做,依赖项的绑定将扩散到代码中,从一个版本切换到另一个版本将更加困难

使用专用的
api
,您将被迫以独立于版本的方式从
api
中的依赖关系中明确您需要的一切


我也不会将
bindings-1
/
bindings-2
开发为SCM分支。您不会合并它们,为什么要分支?

欢迎使用堆栈溢出,Sam!你有没有像git或svn这样的版本控制系统?我的建议是创建两个不同的分支,而不是两个项目