首页 > 其他分享 >匠心精神--来看一个小迭代的代码实现

匠心精神--来看一个小迭代的代码实现

时间:2023-05-17 14:33:38浏览次数:34  
标签:匠心 迭代 -- 代码 Long invoiceTypeId toString private type

问题

我司对外部商户提供的API中,有一个年久失修的开票记录查询接口,近期在一次集中测试时,发现这个接口的响应值与接口文档里描述的不一致。代码里定义的field名是type,而文档里参数名是invoiceTypeId。

 

修改方案

因为无法确定原先的type有没有商户在用,所以,在模型类里新增invoiceTypeId,以保证与文档一致。

 

代码实现

先介绍这个模型类QueryInvoiceResultResponse,是一个普通的POJO,一堆field,一堆getter&setter,往下翻还有个使用IDE生成的toString方法,洋洋洒洒300余行代码。

代码怎么改呢?
这还不太简单!新增一个名为invoiceTypeId的私有field,并为其增加getter&setter,再在声明这个对象的业务类里,调setInvoiceTypeId,妥了。

是的,就是这么简单。

 

once you do, do it well. 我们来看更好的代码实现方式

1)比较type与invoiceTypeId这2个字段名,不难看出type无法完整表达其含义,invoiceTypeId更优。既然如此,我们将type隐藏起来,不让业务类里再关注type,只需关注invoiceTypeId即可。另外,既然保留了type,那么,就要在其javadoc里注明保留的背景和原因,便于后续维护理解。

2)再说说这个300余行的POJO类,显然缺乏代码简洁度。在需求不断迭代过程中,我们不应该总是新增代码,而要适时调优代码。就拿这个POJO来说,我们做一番小改造,首先用lombok的@Data注解来取代getter&setter,以及IDE快捷生成的toString方法。这些都是举手之劳,却能带来极好的效果。这次CR时我就发现开发人员遗忘了重新生成toString方法,致使toString方法中没有体现新增的invoiceTypeId,这对于一个300余行代码的POJO类来说是很容易漏掉的,因此,我们完全借助lombok的@Data或@ToString就好了,没必要自己每次都生成。

/**
 * 查询开票结果返回实体
 *
 * @Author :  peanut
 * @Created : 2020/11/23 下午11:16
 */
@Data
public class QueryInvoiceResultResponse {
    /**
     * 服务商ID
     **/
    private Long levyId;
    /**
     * 商户号
     **/
    private String merId;
    /**
     * 发票类目。 2023-5-15经验证发现对外暴露API里,发票类目参数名是{@link #invoiceTypeId},但不确定这个type是否有商户使用,暂时保留
     **/
    private Long type;
    /**
     * 发票类目id
     */
    private Long invoiceTypeId;
    /**
     * 申请开票金额(单位:分)
     **/
    private Long amt;

    ...
    ...

    public void setInvoiceTypeId(Long invoiceTypeId) {
        this.invoiceTypeId = invoiceTypeId;
        this.setType(invoiceTypeId);
    }

    /**
     * 不再对外暴露setType方法
     * @see #setInvoiceTypeId(Long) 
     * @param type
     */
    private void setType(Long type) {
        this.type = type;
    }
}

 

标签:匠心,迭代,--,代码,Long,invoiceTypeId,toString,private,type
From: https://www.cnblogs.com/buguge/p/17408641.html

相关文章

  • docker 部署 RocketMQ
    1.安装nameServer1.搜索镜像dockersearchrocketmq2.拉取镜像dockerpullrocketmqinc/rocketmq 3.创建数据目录mkdir-p/usr/local/software/rocketmq/nameserver/logs/usr/local/software/rocketmq/nameserver/store4.运行docker命令dockerrun-d--r......
  • Spring+SpringMVC19_Spring练习-业务实现2
    六、用户表和角色表的分析  七、角色列表展示分析  八、角色列表展示-controller层实现  九、角色列表展示-service和dao层实现  十、角色列表展示-配置实现  十一、角色列表展示-页面展示  十二、角色的添加操作  十三、用户列表展示1 ......
  • Apache MINA 初
    3。编写一个ApacheMINA时间服务器该程序的功能非常简单,就是当客户端连接到服务器的9123端口后,程序将服务器当前的时间信息以字符串的形式发送给客户端。我们可以用Eclipse来创建编写这个程序。(1)在Eclipse中创建一个Java项目,例如TimeServerProject,然后将mina-core-2.0.0-M1.jar、......
  • Spring AOP 详解
    此前对于AOP的使用仅限于声明式事务,除此之外在实际开发中也没有遇到过与之相关的问题。最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP来解决。一方面是为了以更加灵活的方式来解决问题,另一方面是借此机会深入学习SpringAOP相关的内容。本文是权当本人的自己AOP学习笔记,以......
  • Java中十个常见的违规编码
    摘要:作者VeeraSundar在清理代码工作时发现一些常见的违规编码,因此,VeeraSundar把针对常见的一些违规编码总结成一份列表,以便帮助Java爱好者提高代码的质量和可维护性。最近,我给Java项目做了一次代码清理工作。经过清理后,我发现一组常见的违规代码(指不规范的代码并不表示代码错......
  • 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)
    JavaNIO成功的应用在了各种分布式、即时通信和中间件Java系统中。证明了基于NIO构建的通信基础,是一种高效,且扩展性很强的通信架构。基于Reactor模式的高可扩展性架构这个架构的基本思路在“基于高可用性NIO服务器架构”(http://today.java.net/pub/a/today/2007/02/13/architectur......
  • 初识Springmvc
    1.什么是springmvc1).轻量级的框架2).基于spring的IOC和AOP进行封装3).基于Servlet进行封装4).实现了mvc设计思想的框架2.springmvc的执行流程图1).浏览器发送http请求2).前端控制器DispatcherServlet负责接收所有的请求3).前端控制器调度处理器映射器HandlerMapping处理请......
  • 浅谈Javascript 中几种克隆(clone)方式
    一:在Javascript里,如果克隆对象是基本类型,我们直接赋值就可以了:Js代码varsStr="kingwell";varcStr=sStr;alert(cStr);//输出kingwellsStr="abc";alert(cStr);//输出kingwell; 把一个值赋给另一个变量时,当那个变量的值改变的时候,另一个值不会受到影响。 ......
  • oracle 10G
      oracle10G安装:数据库口令不可以全部都是数字,否则无法顺利开启EnterpriseManager管理工具 管理工具:SQLplus isqlplus  http:;//localhost:5560/isqlplusEnterpriseManager http:;//localhost:5500/em启动数据库:startupopemmisbb若权限不是 ......
  • 直播商城源码,Android实现监听Settings值变化的功能
    直播商城源码,Android实现监听Settings值变化的功能先创建一个内部类继承自ContentObserver   classSettingsContentObserverextendsContentObserver{    publicSettingsContentObserver(){      super(newHandler());    }    ......