在SpringBoot2中开发特征切换功能

翻译:吴嘉俊,叩丁狼高级讲师。 

众所周知,软件开发是一个协同的活动。开发中的整合工作往往都被视为邪恶的,开发人员会像魔鬼一样对待这个过程。为了应付这种情况,有非常多的方法和规则被开发出来。特征切换就是其中之一。在本文中,你将会看到什么是特征切换,了解特征标记,以及如何在你的Springboot应用中使用。

什么是特征切换

简单来说,特征切换是控制程序按照某种流程执行的一个变量开关。不用修改代码,就能切换到不同的执行场景的方式。

根据自身需求,用于特征切换的变量值可以在应用启动的时候就设置好,或者在运行期间根据需要进行调整。针对后一种情况,只需要把特征切换变量值持久化下来,在实际运行的时候去获取即可。

你应该了解过特征标志的另一种实现方案:按照特征代码分支。在实际的开发中,这两种技术可以组合起来使用。比如,针对一个新的用户故事(User Story),可以使用特征分支,同时,也可以使用特征切换来控制在针对不同的场景的用户需求。

不过,虽然特征切换有很多适用场景,但是它仍然有自己的缺点。最大的一个问题就在于它的复杂性。如果没有一个良好的管理策略,特征切换会很容易失去控制,变成项目的一个噩梦。幸运的是,如果你遵循几个最佳实践,使用特征切换会变得非常容易。

使用特征切换来选择合适的Bean

在Springboot的应用中,使用特征切换最常见的场景是,给定一个接口,根据特征值切换到一个不同的实现类。我们来简单看下这种场景:

抽象依赖

考虑一个场景:在一个web服务端中,提供了从数据库中筛选一个货品列表的功能。你现在的目标就是创建一个特征切换,允许动态的选择不同的数据库源提供给web服务。

想要使用特征切换,第一个要做的事情,就是把提供给其他类使用的依赖,使用接口抽象。

下面的代码展示了一个商品的REST接口,依赖于ProductRepository接口:

@RestController
@RequestMapping("/products")
class ProductController {

   private final ProductRepository productRepository;

   ProductController(ProductRepository productRepository) {
       this.productRepository = productRepository;
   }

   @GetMapping
   Collection<Product> getAll() {
       return productRepository.findAll();
   }

}

目前,我们只有一个ProductRepository的实现,接下来,当我们要添加另一个ProductRepository实现的时候,我们就需要考虑特征切换了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值