根据接口文档撸代码的心得

需求:在现有的web项目调用设备的接口来操控设备

分析过程:

                文档的接口很多大概一两百,每个接口的参数个数不统一,有些是post,有些是get

如果像这样:

public String methodA(String arg1,String arg2 ...){
       httpClientUtil.post(...);

}

public String methodB(String arg1,String arg2 ,String arg3...){
       httpClientUtil.get(...);

}

 

势必会很乱(其实我刚开始就是这么搞的),细看会发现这些接口还是有很多共同点的

于是改为:

public String methodA(String jsonParameters,String postORget){
       httpClientUtil.service(postORget   ,   ...);

}

public String methodB(String jsonParameters,String postORget){
       httpClientUtil.service(postORget   ,   ...);

}


于是方法都统一了,其实很简单就是把所有参数都封装到一个json字符串中,另外提供一个判断是post或get的标志

httpClientUtil.service(postORget   ,   ...)会根据标志调用post或get

貌似service层已经很简洁了,可是controller层还有问题

因为每次调用service的方法都会在之前和之后执行一样的操作

public String doXXX(String ...){
     ......
    if(xxx){
          a1();

          result=service.methodA();
          a2();

      } 
      return result;

}


如果不嫌麻烦这样写没问题,但是对于有洁癖的程序员是不能容忍的

这次完全可以模仿刚才统一post和get一样,但是之前只有两个,现在有两百个,当然不能再用枚举去得到方法

于是想到Java反射机制:

public String doYYY(String methodName,String args,..){
    ......
    if(xxx){
          a1();
          Method method=TheSevice.class.getDeclaredMethod(methodName,new Class[]{.String.class , ..});
         result=method.invoke(theService,args,..);
         a2();

     } 
      return result;
}






public String doXXX(String ...){
     return doYYY("yourMethodName","yourArgs",otherNeed....);
}



现在的重复代码少多了!


心得:1.接口写得垃圾会给调用者带来很多麻烦

            2.尽量减少重复代码






你可能感兴趣的:(java)