美文网首页
服务端接口设计模式(四)

服务端接口设计模式(四)

作者: Hello米酒 | 来源:发表于2021-03-16 09:04 被阅读0次

1、目前抽象类AbstractBusiService中只是做了参数校验这一项,功能比较单一,可以再多加一些实用功能,比如打印业务接口的执行耗时,可以在doHandle方法添加起始时间,执行结束时间,这样就统计出了执行耗时。代码比较简单,我就不加了。

2、可以在的印象类中加几个空方法,比如before(),after()方法,方便实现类来扩展这2个方法,代码如下:

/**
 * 进入doHandle方法时调用
 * @param t
 */
protected void before(T t){
}

/**
 * 执行结束时调用
 * @param t
 * @param r
 */
protected void after(T t, R r){
}

@Override
public Result<R> doHandle(RequestMessage requestMessage) {
   Result<R> result = Result.errorResult();
   T t = null;
   try{
      t = this.parseParams(requestMessage.getData());
      this.before(t);
      result = this.passValidator(t);
      if(RespCode.SUCCESS.getCode().equals(result.getCode())) {
         result = this.handle(t);
      }
   }catch(Exception e){
      e.printStackTrace();
   }finally {
      this.after(t, result.getData());
   }
   return result;
}

这里只所以不用抽象方法,是因为实现这2个方法不是必须的,如果部分接口有实际的需要,重写这2个方法即可,对其它代码不影响。如果大家看过ThreadPoolExecutor源码,对这里实现方式应该就不陌生,在runWorker方法中,就执行了2个空方法,分别是beforeExecute和afterExecute,这也是留给子类扩展的,部分摘录代码:

try {
    beforeExecute(wt, task);
    Throwable thrown = null;
    try {
        task.run();
    } catch (RuntimeException x) {
        thrown = x; throw x;
    } catch (Error x) {
        thrown = x; throw x;
    } catch (Throwable x) {
        thrown = x; throw new Error(x);
    } finally {
        afterExecute(task, thrown);
    }
} finally {
    task = null;
    w.completedTasks++;
    w.unlock();
}

protected void beforeExecute(Thread t, Runnable r) { }
protected void afterExecute(Runnable r, Throwable t) { }

3、基本上这个实例到此就结束了,但抽象类中还有更多的想象空间。当一个设计框架掌握了程序的入口和出口,它就可以在里面做很多的事情,有很多的发挥空间,譬如,这里的before和after也可以当作一个拦截器来使用,甚至可以在这里增加业务监控,这里有完整的输入和输出参数。这里还有一个优点就是开发的同事可以专注自己的核心业务代码编写,每个接口都可以安排到具体的个人负责,不会导致某个类文件中有非常多的代码,每个开发的人都在上面写自己的代码,导致类文件臃肿不堪,维护的成本相当高。这种接口设计模式就很好的避开了这一点,接口维护相互不影响。(完)

完整Demo下载地址:https://github.com/gbinb/design-demo

相关文章

  • 服务端接口设计模式(四)

    1、目前抽象类AbstractBusiService中只是做了参数校验这一项,功能比较单一,可以再多加一些实用功能...

  • 服务端接口设计模式(一)

    1、常见的服务端接口设计模式是采用restful形式对外提供服务,我以用户登录、获取个人信息等接口作为示例,这里只...

  • 服务端接口设计模式(二)

    上一篇中讲解了服务的入口实现,本版将讲解本设计中一个最重要的类AbstractBusiService,它是一个抽象...

  • 服务端接口设计模式(三)

    从上往篇看到了在抽象类中进行了统一的参数校验,本篇我将增加两个实用的场景,登录用户的身份验证及无需身份验证的接口调...

  • 需要接口管理的你了解一下?

    前言 在日常的开发模式里,前端负责页面和动态脚本的处理,服务端负责业务逻辑和接口的实现。当前端需要服务端提供的接口...

  • Java 常用设计模式简例

    简述Java常用设计模式 简述Java常用设计模式及设计原则 strate---------策略模式针对接口编程,...

  • 接口隔离原则

    个人博客原文:接口隔离原则 设计模式六大原则之四:接口隔离原则。 简介 姓名 :接口隔离原则 英文名 :Inter...

  • 19年第34周:Go语言 有趣的接口

    一、Golang的接口 Go语言接口设计很符合设计原则参考图灵丛书中的《设计模式》 当我看到Golang的接口时,...

  • iOS设计模式(二)、结构型设计模式

    结构型设计模式 结构型设计模式主要用于处理类和对象的组合 适配器模式 将一个原始接口转成客户端需要的接口原始接口-...

  • Java设计模式:代理模式

    Java设计模式——代理模式 代理模式主要分为接口,委托类,代理类 接口:规定具体方法委托类:实现接口,完成具体的...

网友评论

      本文标题:服务端接口设计模式(四)

      本文链接:https://www.haomeiwen.com/subject/bbklcltx.html