• 代码改造实录-- 分解大函数,并以新建函数名解释其功能


    原来的代码:

     1 OrderInfo orderForm = this.orderInfoRepository.findByOrderId(orderNo);
     2 if (orderForm != null && orderForm.getOrderStatus() == 0) {
     3     MakeAnAppointment make = this.makeAnAppointmentRepository.findByOrderId(orderForm.getId());
     4 
     5     if (orderForm.getOrderType() == 0) { 
     6         make.setOrderStatus(1); // 成功
     7         String extra = orderForm.getExtra();
     8         OrderPlus doctorVisit = JSON.parseObject(extra, OrderPlus.class);
     9         Integer id = doctorVisit.getId();
    10         OrderPlus d = this.doctorVisitRepository.findById(id).get();
    11         d.setMakeAnAppointment(doctorVisit.getMakeAnAppointment() + 1);
    12         this.doctorVisitRepository.save(d);
    13 
    14         JSONObject params1 = new JSONObject();
    15         params1.put("title", "加号提醒");
    16         params1.put("content", orderForm.getUserName() + "申请了你的加号,请及时处理");
    17         JSONObject params2 = new JSONObject();
    18         DoctorInfo doctorDetail = this.doctorDetailRepository.findById(orderForm.getDoctorId()).get();
    19         UserAccount user2 = this.userRepository.findById(doctorDetail.getAccountId()).get();
    20         params2.put("userId", user2.getUserName());
    21         params2.put("msg", JSON.toJSONString(params1));
    22         HttpUtils.post(this.url + "/api/im/send", params2);
    23 
    24         this.makeAnAppointmentRepository.save(make);
    25     } else if (orderForm.getOrderType() == 1) { 
    26         make.setOrderStatus(1);
    27         this.makeAnAppointmentRepository.save(make);
    28     } else if (orderForm.getOrderType() == 2) { 
    29         make.setOrderStatus(1);
    30         this.makeAnAppointmentRepository.save(make);
    31 
    32     } else {
    33         OrderAnnualFee fee = new OrderAnnualFee();
    34         BeanUtils.copyProperties(orderForm, fee);
    35         annualFeeService.saveAnnualFee(fee);
    36         orderService.saveLog(orderForm.getOrderId(), orderForm.getUserName(), orderForm.getUserName() + "会员缴费");
    37     }
    38     orderForm.setPayType("wx");
    39     orderForm.setPayTime(Long.valueOf(System.currentTimeMillis()));
    40     orderForm.setOrderStatus(1);
    41     this.orderInfoRepository.save(orderForm);
    42 }

    修改后代码:

     1 OrderInfo orderForm = this.orderInfoRepository.findByOrderId(orderNo);
     2 if (orderForm != null && orderForm.getOrderStatus() == 0) {
     3 
     4     if (orderForm.getOrderType() == 0) {
     5         String extra = orderForm.getExtra();
     6         OrderPlus doctorVisit = JSON.parseObject(extra, OrderPlus.class);
     7         orderPlusService.increaseAppointment(doctorVisit.getId());
     8 
     9         MessageSenderBiz.sendLovePlusToDoctor(orderForm.getUserName(), orderForm.getDoctorName(), this.url);
    10         appointmentService.changeAppointmentStatus(orderForm.getId(), 1);
    11     } else if (orderForm.getOrderType() == 1) { 
    12         appointmentService.changeAppointmentStatus(orderForm.getId(), 1);
    13     } else if (orderForm.getOrderType() == 2) { 
    14         appointmentService.changeAppointmentStatus(orderForm.getId(), 1);
    15     } else {
    16         OrderAnnualFee fee = new OrderAnnualFee();
    17         BeanUtils.copyProperties(orderForm, fee);
    18         annualFeeService.saveAnnualFee(fee);
    19         orderService.saveLog(orderForm.getOrderId(), orderForm.getUserName(), orderForm.getUserName() + "会员缴费");
    20     }
    21     orderForm.setPayType("wx");
    22     orderForm.setPayTime(Long.valueOf(System.currentTimeMillis()));
    23     orderForm.setOrderStatus(1);
    24     this.orderInfoRepository.save(orderForm);
    25 }

    修改后,将发送信息功能和更新预约状态两个功能独立出来,并移交至各自的功能类中。这样可以:1、增加代码复用,方法功能更清晰;2、符合类的封装思想,自己的事情自己办;3、原来的函数更简洁易读。

  • 相关阅读:
    Web API系列之三 基本功能实现
    Web API系列之二WebApi基础框架搭建
    C# (类型、对象、线程栈和托管堆)在运行时的相互关系
    C# 命名空间和程序集
    C# new关键字和对象类型转换(双括号、is操作符、as操作符)
    Vue.js系列之四计算属性和观察者
    Vue.js系列之三模板语法
    C# 对象哈希码
    Class与Style绑定
    Koa学习笔记
  • 原文地址:https://www.cnblogs.com/GreenMountain/p/13474146.html
Copyright © 2020-2023  润新知