策略模式,从防腐层改造聊到Nacos插件的应用

Posted 大鸡腿同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了策略模式,从防腐层改造聊到Nacos插件的应用相关的知识,希望对你有一定的参考价值。

大家好,我叫大鸡腿,大家可以关注下我,会持续更新技术文章还有人生感悟,感谢~

前言


总所周知,策略模式是个好东西,他不仅是一种技术,在我看来更是一种思想。

what is 策略模式

策略模式就像一个工具箱,当我们遇到不同的场景,拿出不同工具。它的好处是
符合开闭原则还有单一原则,当我们需要对另外一种场景进行处理的时候,只需要去打造另一款工具,而不是在之前的工具去修改。

防腐层改造

what is 防腐层


我们在学习DDD的时候,会学习到防腐层。它主要功能是将第三方api进行隔离,这样不会跟内部系统进行强耦合,提高了可扩展性。

how to do it


场景

刚好在项目里头,有依赖第三方api,之前由于时间很赶,直接跟业务代码耦合在一起了,在最近时间比较充裕的时候,我们将它优化一下。

思路:采用防腐层,将外部api进行隔离开,采用api的形式进行实现,这样为后面的扩展提供良好的基础。

防腐层改造

首先是定义api,为了实现类通过该接口进行扩展。

public interface Facade 

    /**
     * 处理逻辑
     *
     */
    xx<?> dealWith();

    /**
     * 类型
     *
     * @return
     */
    String getType();



然后我们来实现扩展类


@Service
public class xxFacade implements Facade 

    @Override
    xx<?> dealWith()
        //todo 做特定逻辑处理
    


编写设配器


@Service
public class Adapter 

    @Resource
    private List<Facade> facadeList;

   
    private Facade getFacade(String xx) 
        return facadeList.stream().filter(it -> it.getType().equals(xx)).findFirst().orElseThrow(() -> new BizException("没有找到实现类"));
    

   
    public xx<?> dealWith(xx) 
        return getFacade(xx).dealWith();
    



到这里我们看到,借助spring注入实例的方法,然后通过接口里头的type方法,来判断我们具体要拿出什么工具来解决问题。到此反腐层就改造完成✅

Nacos 插件

我们看下官网的文档,里面也有介绍Nacos插件这一块spi,如下图鉴权这一块的spi。接下来,我们来看下策略模式中里面的体现吧~

首先看到的是接口类,我们可以通过实现这个接口来扩展鉴权功能。

这里就是接口的一种实现类。

这里通过classload来将所有实现该接口的类塞到set里面,然后根据特定的标识来获取。

总结

策略模式很常见的设计模式,我们可以借助它来提高代码质量,提高系统的扩展性。

以上是关于策略模式,从防腐层改造聊到Nacos插件的应用的主要内容,如果未能解决你的问题,请参考以下文章

nacos配置中心单击模式改造为集群模式

DDD开发实践流程

防腐层(Anti Corruption Layer)介绍

防腐层(Anti Corruption Layer)介绍

防腐层(Anti Corruption Layer)介绍

基于 Observable 构建前端防腐策略