java - 具有不同依赖关系的两种实现的最大可重用性
问题描述
我的任务包括将 API 网关从 Zuul 迁移到 Spring Cloud Gateway。目前有两个主要版本:1.0.1.RELEASE 和 2.0.0.RC1。第一个版本非常基础,我必须手动实现与速率限制、身份验证等相关的过滤器......
而第二个版本具有我们需要的所有功能,并具有完整的 YML 支持。我们公司有严格的规定,永远不要使用 beta 或 RC,而且我们需要在几周内投入生产网关的第一个版本,所以没有足够的时间等待版本 2 的最终发布。
我的团队负责人特别要求我制作 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.RELEASE
和2.0.0.RC2
相应的。
您的代码将仅通过api
. 不能直接访问依赖项提供的类和方法。我什至不会将依赖项包含为编译时依赖项。然后,您将导入bindings-1
或bindings-2
根据您要使用的版本。
有一个单独的api
将需要一定的努力。它会显得过度设计。但是,如果您不这样做,对依赖项的绑定将在您的代码中扩散,并且从一个版本切换到另一个版本将更加困难。
使用专用的api
,您将被迫以与api
版本无关的方式从依赖项中明确您需要的一切。
我也不会开发bindings-1
/bindings-2
作为 SCM 分支。这不像你会合并它们,那么为什么要分支呢?
推荐阅读
- python - Entrez (biopython):如何将术语搜索限制在特定期刊?(考研)
- android - 由于权限政策,我无法发布我的应用
- twitter-bootstrap - Bootstrap 4 - col-sm-12 的 col 没有响应
- java - Thymeleaf 使用 th:each 动态创建表单
- java - 从 csv 文件导入 Excel 进行转换
- javascript - HTML onClick 属性不调用函数
- bash - 查找命令失败,出现“没有这样的文件或目录”错误
- java - TextView 中的“&minus”而不是“-”,它设置来自 JSON 的文本
- java - 在 Redhat 7.5 上安装 OpenJDK 默认不会创建符号链接“/usr/java/latest”?
- r - 将使用文本而不是数字匿名数据的功能