工作多年,认识了各种各样的同事。看过各种各样的代码,优秀的,垃圾的,没有吸引力的等等,本文记录一些个人的代码开发习惯。1.封装方法参数当你的方法参数过多时,建议封装一个对象。以下是反面教材。谁教你写这样的代码?publicvoidupdateX(longnum,Stringstr1,Stringstr2,Stringstr3,Stringstr4,Stringstr5,Stringstr6){}尝试将这些输出封装到一个对象中publicclassX{privateLongnum;私有字符串str1;...}为什么要这样写?例如,您的方法用于查询。如果后面添加查询条件,是否需要修改方法?每次添加方法参数列表都必须更改。封装一个对象,以后无论增加多少查询条件,只需要在对象中添加字段即可。关键是代码看起来也很舒服!2.封装业务逻辑如果你看过《屎山》,你会有很深的感受。这样的方法可以写几千行代码,一点规律都没有。往往负责人会说这个业务太复杂了,没办法改进,这是偷懒的借口。无论业务多么复杂,我们都可以通过合理的设计和封装来提高代码的可读性。下面是一个建议的代码。@TransactionalpublicvoidclearBills(LongcustomerId){//获取清算所需的账单ngClearContextcontext=getClearContext(customerId);//验证金额是否合法checkAmount(context);//判断优惠券是否可用,返回抵扣金额CouponDeductibleResponsedeductibleResponse=couponDeducted(context);//结算所有账单DepositClearResponseresponse=clearBills(context);//发送还款对账消息repaymentService.sendVerifyBillMessage(customerId,context.getDeposit());//更新账户余额accountService.clear(context,response);//处理已清除的优惠券,用完或未绑定couponService.clear(deductibleResponse);//保存优惠券扣减记录clearCouponDeductService.add(context,deductibleResponse);}这段代码业务很复杂。内部保守估计做了10000个东西,但是不同层级的人写出来的东西是完全不一样的。不得不赞一下这个业务的拆分和方法的封装。一个大企业中有多个小企业。不同的业务可以调用不同的服务方法。即使没有流程图等相关文件,接手的人也能很快了解业务。很多初级开发写的业务方法,第一行代码是A业务,下一行代码是B业务,下一行代码是A业务。还有一堆业务之间嵌套调用的单元逻辑,这是非常混乱和很多代码。3、判断集合类型不为空的正确方法很多人喜欢写这样的代码判断集合if(list==null||list.size()==0){returnnull;}当然,如果你坚持这样写是没有问题的。org.springframework.util.CollectionUtils不过你别觉得不舒服,现在framework中的任何jar包都有一个采集工具类,比如com.baomidou.mybatisplus.core.toolkit.CollectionUtils。以后请写if(CollectionUtils.isEmpty(list)){returnnull;}4.集合类型返回值不返回null当你的业务方法返回集合类型时,请不要返回null。正确的操作是返回一个空集合。看一下mybatis的列表查询。如果没有查询到任何元素,它将返回一个空集合而不是null。否则,调用者必须进行NULL判断,大多数情况下对象也是如此。5.推荐使用lombok当然,这是一个有争议的问题,我的习惯是用它来省略getters、setters、toString等。使用Lombok6,尽量少写工具为什么要少写工具类,因为你写的工具类大部分都包含在你导入的jar包中,比如String、Assert断言、IO上传文件、拷贝流、Bigdecimal等等。编写自己的错误和加载冗余类很容易。7.写有意义的方法注释。写这种评论怕后面接手的人瞎了眼。要么不写,要么在后面加个说明。写这样的评论收到IDEA的一堆警告很痛苦/***请求号码验证**@parama*@paramb*@paramparam*@returnResult*/8,尽量不要让IDEA报警很反感在IDEA代码窗口看到一连串的警告,很不舒服。因为有警告,可以优化代码,还是有问题。几天前,我在Teams中发现了一个小错误。跟我没关系,只是同事在外面看生意,判断生意为什么不对。我瞥了一眼问题。因为java中整型字面量int是类型的,变成了一个Integer的集合,然后点击stepId是一个long类型,Long在集合里面,那么这个contains正确返回false,不是一个类型。你看,如果你注意警告,你可以将鼠标移到它上面看到提示,并且会少一个生产错误。9.尽可能使用新的技术组件。我觉得这才是一个程序员应该具备的品质。反正我喜欢用新的技术组件,因为新的技术组件的出现就是为了解决老技术组件的不足,作为技术人员要与时俱进。当然,前提是要有准备,不能想当然的升级。Java17已经发布了最简单的例子,新项目仍然使用Date来处理DateTime。结论以上是我个人的一些看法,如有不足之处,请指出。
