zoukankan      html  css  js  c++  java
  • 业务代码优化杂谈

           最近在审查组员代码的时候发现了几个问题,这里整理出来分享给大家,希望大家看了后有不同意见欢迎拍砖。

          一、背景:分页接口中大量的模板代码。代码如下:

    PageVO<UserSettle> result = new PageVO<>();
    Page page = PageHelper.startPage(userSettleQueryDTO.getPage(), userSettleQueryDTO.getSize());
    List<UserSettle> userSettles = userSettleMapper.queryAllByPage(userSettleQueryDTO);
    PageInfo pageInfo = new PageInfo<>(page.getResult());
    result.setPage(pageInfo.getPageNum());
    result.setSize(pageInfo.getPageSize());
    result.setTotal(pageInfo.getTotal());
    result.setDataList(userSettles);
    return result;
    对于这种代码,直接告诉我这样写不合理。想到我在整理框架的时候,使用了统一的结果返回,所以这块提了一个建议。这里先直接上修改之后的代码
    Page page = PageHelper.startPage(userSettleQueryDTO.getPage(), userSettleQueryDTO.getSize())
            .doSelectPage(() -> userSettleMapper.queryAllByPage(userSettleQueryDTO));
    return page;
    修改之后是不是就很简单了,那全局返回结果怎么处理的呢
     1 @RestControllerAdvice
     2 public class ResponseControllerAdvice implements ResponseBodyAdvice<Object> {
     3 
     4 
     5     @Override
     6     public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
     7         //如果接口返回类型本身就是ResultVO那就没必要进行额外的操作,返回false
     8         String name = methodParameter.getMethod().getDeclaringClass().getName();
     9         return Objects.nonNull(name) && name.contains("xx.xx.controller") && !methodParameter.getParameterType().equals(ResultVO.class);
    10     }
    11 
    12     @Override
    13     public Object beforeBodyWrite(Object data, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
    14         // String类型不能直接包装,所以要进行些特别的处理
    15         if (methodParameter.getGenericParameterType().equals(String.class)) {
    16             ObjectMapper objectMapper = new ObjectMapper();
    17             try {
    18                 // 将数据包装在ResultVO里后,再转换为json字符串响应给前端
    19                 return objectMapper.writeValueAsString(new ResultVO<>(data));
    20             } catch (JsonProcessingException e) {
    21                 throw new APIException("返回String类型错误");
    22             }
    23         }
    24         //对于分页返回结果处理
    25         if (methodParameter.getParameterType().equals(Page.class)) {
    26             Page page = (Page) data;
    27             PageVO result = new PageVO();
    28             result.setPage(page.getPageNum());
    29             result.setSize(page.getPageSize());
    30             result.setTotal(page.getTotal());
    31             result.setDataList(page.getResult());
    32             return new ResultVO<>(result);
    33         }
    34         // 将原本的数据包装在ResultVO里
    35         return new ResultVO<>(data);
    36     }
    37 }

    通过这个例子,我们可以发现如果在开发业务过程中存在大量模板代码,那就是时候去优化了。

  • 相关阅读:
    git注册和基本命令
    thinkphp概述2
    thinkphp概述
    PHP基础知识总结
    phpmyadmin教程
    开发环境wamp3.06 + Zend studio 12 调试配置
    PHP标记风格,编码规范
    PHP开发工具 zend studio
    php与ajax技术
    可变参模板template
  • 原文地址:https://www.cnblogs.com/mczhou2/p/15194084.html
Copyright © 2011-2022 走看看