匠心精神--来看一个小迭代的代码实现
Posted buguge - Keep it simple,stupid
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匠心精神--来看一个小迭代的代码实现相关的知识,希望对你有一定的参考价值。
问题
我司对外部商户提供的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;
当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/buguge/p/17408641.html
java开发的项目中模块、包、类、接口的关系是啥?
看一个java的项目 理解不了各模块是干什么用的 每个模块都有包吗?每个包都有类和接口吗?
可以跟.net C#对比着说明下吗?
我由于之前学的C# 现在怎么也理解不了java。
继承指的是一个类(称为子类、子接口)继承另外的一个类(父类、父接口)的功能,并可以增加它自己的新功能的能力。在java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。实现指的是一个Class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在java中实现关系通过implements明确标识,在设计时一般没有争议性。依赖就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性、临时性、非常弱的,但是类B的变化会影响到类A。比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖。表现在代码层面为,类B作为参数被类A在某个method方法中使用。
想要了解更多关于java开发的相关信息,推荐咨询千锋教育。千锋企业合作部于2013年成立,主要针对企业用人需求和学员职业规划进行服务。经过8年发展,企业合作部已经成为千锋连接企业和学员的重要纽带。服务面对企业建立全方位、立体化、遍布全国的企业合作网络,覆盖全国一线二线城市大中小型公司,成功帮助20000余名人才实现就业,合作企业达20000余家,每年签订1000余份人才培养订单,让广大学员没有后顾之忧。
参考技术A 让我谈谈流程为导向,面向对象,这是两个思想流派,他们是能够实现的能力,使用该程序来完成一件事。
唯一的思维方式是不一样的。
面向过程的一件事,一个项目分解成一个函数的小功能。
面向对象的事情,作为一个小对象或这些对象之间的相互关系组成的一个小部分组成,构成了整个项目。
一切是一个面向对象的思想的对象,我,你,他也是。
“类”是一个抽象的对象,或进行了总结。例如,你可以为人类总结。
整体而言,类是抽象的虚拟对象是有生命的东西。
是一个类,我你他是对象。
一般的面向对象编程方法,设计一个类,然后创建一个这个类的对象。
经过这个对象的相关业务。
点:操作的对象,对象不要紧经营。
这里谈谈如何设计一个类,
类有一些封装的性质和功能。
面向过程的思想,程序通常是一个函数,这些函数的相互调用。
形成一个完整的方案来解决问题。其基本结构是:
函数()
......;
函数的两()
......;
......
主要功能()
......;
?
?
然而,在面向对象的思想是包在一起,形成一个类。
类
?函数A()
?
?......;
?
功能二()
?
?......;
?
?......
?
?
产生一个对象,那么这个类:从类的类名学生
方法是生成对象:学生S1;
在这里,s1是一个对象,它生产的对象可以是相关的操作。
操作方法,如:S1是函数();
等等。在这篇文章中的具体细节就不说了只说想。
这是普通的一点是,在具体实施过程中的类,然后生成一个对象,该对象来调用相关的操作。
如果在面向过程的功能封装成类,然后对象的操作。
A类包,它通常作为一个模块,其他类型的呼叫需要的时候。
类是一个抽象的,抽象的东西一些共同的特点,总结提出的公共部分的包一起。
包,已经上面说的,装在一个容器内的一些性质和功能。
在这里,我用一个游戏来解释:
假设我们想成为游戏内打怪的游戏类似,简单,怪不要打,只有玩的人。
他的血液不断减少,直至死亡。
所有的怪物在抽象的共同特点,所以我们得到了一个类:怪物
级怪物
??炭怪物名称;
?血液;
?怪物(怪物N,血列印)/ *构造函数* /
?
怪物的名字吗?=怪物名称n;
?血=血N;
?
毒打功能(?)
?
?血液减少;
?
?判断功能()
?
?(血== 0)
?输出(“你赢了!”);
?
?玩游戏()
?
?(血> 0)
?
?毒打函数();
??判断函数();
?
?
?
在这样一个怪物类属性的定义:怪物名称,血液和功能:结构殴打,确定
根据这种情况,可以产生一个对象。
一个类可以有任意数量的对象,区分这些对象,取决于构造函数。
让我们继续写我们的计划
主要的主要功能
无效的主要()
/ ******对象产生****** /?
?怪物怪物(“狼来了”,5000);
?怪物怪物(“老虎”,8000);
怪物怪物(“蛇”,3000);
开始我们的游戏?/ **为了几个对象** /
?怪物玩游戏();
?怪物玩游戏();
?怪物玩游戏();
?
然后主要的功能,我们已经建立了三个对象,它们共享一个类。
可以看到,类相当于一个组件,模块,我们需要建立它的对象,将是能够实现他的功率封装
可以。
这是面向对象的优点,可重复使用,不必每一个用于重写。
尽管如此,感觉,还是没有说明白,真的有点只能意味着说不出的感觉。
事实上,如果这本书,真正认真写了一些东西,他们可以理解,感到无形的。 参考技术B 一个功能模块中有多个包(一对多);
一个包中可以有多个类(一对多);
一个类(接口类,interface)中可以有多个抽象方法(一对多);
一个类(实现类,继承(extends)自接口类)中可以有多个方法(一对多);
解释:这个实际上是逐级细分的过程就相当于一个国家,有各个等级学历的学校,学校中可以有多个年级,每个年级有多个班级,班级中有多个学生。 参考技术C java面向对象的,你可以理解包是文件夹,类是里面的一个文件夹,接口也是一种类,类里面才是一个个对象文件,例如视频,音乐等。。希望可以帮到你。 参考技术D 没大看明白你的意思,我猜想你是不是看的java项目是基于一些框架做成的。比如,有包名为:**.action,**.service,**.form等类似这些包。如果是这样的话,这些都是包,包里面是类。
至于接口也是放在包下面的。接口也是类,是高级层面上的类。就比如,车是一个接口,小汽车,大汽车是类,这些小汽车,大汽车类可以实现车这个接口,以减少工作量。这些是java中的基础知识,自己看本基础知识课本就懂了。说的很粗略,希望能帮助你。追问
恩我是在看项目 有一些模块,下一层是源包、重要文件、库,源包下一层应该就是包吧?包里面有 .java 和.properties的文件 但是不是每个包都有 我找不到规律 还有看不出哪个是主类(是这么叫吧?类似主函数的),所以我就摸不着头脑了
追答这些都是建项目时生成的,你把你看的向项目导到一个开发软件,比如myeclipse 或websphere里看,就容易了。
以上是关于匠心精神--来看一个小迭代的代码实现的主要内容,如果未能解决你的问题,请参考以下文章