记一次WebService失败重构

重构原因:
    源代码在编写时需要写很长的准备参数,赶回数据还需要做解析处理,为了能够让减少准备参数,并且得到后的数据自动做解析操作,于是产生了我对代码重构的想法

重构前代码调用的例子
3
重构后构想的代码例子
HashMap<String,String> mMap = new HashMap<>();
mMap.put("projectId",getIntentProjectData().get(proIndex).getProId());
TforWebServiceForBeanUtils.callWebService(this,true,TforWebServiceForBeanUtils.WEB_SERVER_PROJECT_URL, "getRectificationPsnInProject",mMap,TforWebServiceForBeanUtils.NAMESPACE_USER, List.class,new TforWebServiceForBeanUtils.WebServiceCallBack<List<Zhenggairen_Bean.DataBean>>() {
    @Override
    public void callBack(List<Zhenggairen_Bean.DataBean> resultObject) {
            SourceDateList = filledData(resultObject);
            // 根据a-z进行排序源数据
            SourceDateList = PaiXu(SourceDateList);
            adapter = new RectificationListAdapter(Screening_Zhenggai_Activity.this,ZhenggairenBeanList);
            try{ zhenggai_listView.setAdapter(adapter);}catch (Exception e){
                e.printStackTrace();
            }
    }
});

很明显,我如果重构成功后,准备参数少了不说,而且得到的对象可以直接复用,这将大大减少所需要的无用代码量
    代码有点长 ,先贴到子文件中
重构代码最难解决的是,如何自动解析json回来的字符串
json大体格式如下
 data : 0001ZZ1000000002JV3U
 resultCode : 1

但是data中有单个对象,有list,还可能有map,当时没有想太多 直接用这种方式解决了
TforBaseResult baseResult = fromJson(resultMap.get("return").toString(), (Class) t);

把泛型t进行解析 ,结果对单个对象是有用的,对于对象中list  里面map<string,String>无法解析
于是想到了这样的方式解决
    TforBaseResult<List<Map<String,String>>> baseResult = new Gson().fromJson(resultMap.get                         ("return").toString(), type);
            for(int i=0; i<baseResult.getData().size();i++){
                for (String key : baseResult.getData().get(i).keySet()) {
                    Log.e("candy","key= " + key + " and value= " + baseResult.getData().get(i).get(key));
                }
            }
虽然里面的map被解析了,但是如何生成对应的对象还是一个问题,还有,如果里面只有一个map,也就是说只有一个对象,那如果智能识别,现在还是一个问题,总结 这次的重构代码失败,无法进行重构操作


经验总结:本次重构中,遇到主要问题是对泛型T的操作不足,也不知道如果去智能操作对象,直接传Class字节码文件也不太可能,用泛型也无法操作这个问题,这个问题目前先记录下来,日后再说



猜你喜欢

转载自blog.csdn.net/u013476435/article/details/77478620