代码重构
博主先交代下写这篇博客的背景,由于博主最近接手的项目是一个第三方的项目,源码质量看上去很是令人头痛,代码基本不分层,从controller层开始堆业务逻辑,service层只是封装一个直接调用dao层的接口,所有的业务逻辑都堆在controller。而且大量的if else嵌套,加上for循环的花括号,看的人想打人。仔细一看还有更多的"surprise",for循环里面操作数据库,全量查询不分页,方法最外层加锁,结果就是用户卡的苦不堪言,我去后台查了下接口耗时日志,最长的达到惊人的十多秒!还好是内部系统,不然用户早就跑光了!感觉就像是大学生写的代码一样,没有规范可言。所以趁最近业务需求不是很多,向老板提出要做代码重构,不然这代码真的没法维护。
我主要从下面几个方面对代码进行重构:
一、包名、类名、变量、常量的命名规范
详细的命名规范我就不啰嗦了,建议参考阿里代码规范,网上可以下载下来慢慢看,最重要的是工作当中要遵守,知易行难。
二、自动注入规范
我看大部分人都是用属性注入,用起来很方便,也很好理解。如下
@Autowired
private AbbService abbService;
细心的同学会发现idea上面会出现警告:Field injection is not recommended,不推荐属性注入。这是因为spring4.0之后已经不推荐使用属性注入的方式了,因为不能有效的指明依赖。
建议使用setter注入。
private AbbService abbService;
@Autowired
public void setAbbService(AbbService abbService){
this.abbService = abbService;
}
三、代码结构规范
后端最起码要遵守三层规范,业务逻辑放在service层,如果是有的多数据源,service层不好放业务逻辑,有必要多加一层manager层处理业务逻辑,manager层调service层,service层再调用dao层。
多处使用的代码封装成工具类或者接口,理论上代码行数超过一屏就应该封装成方法。如果大段代码都是赋值操作,那么封装成一个方法即使行数超过一屏也没啥关系,因为大家知道是赋值也不会去细看,不影响阅读。大家看情况灵活运用,保证代码看上去舒服就可以。
现在大多数项目都用springboot微服务了,jdk也都升到8及其以上,建议大家在使用循环的时候尽量用stream,不然你升到8干啥呢对吧。之前博主面试的时候就被问到用了jdk8的哪些新特性,如果你啥都没用就傻了。很多新特性能用的尽量去用,stream只是jdk新特性之一,stream用习惯了写代码真的不要太爽。
四、DB操作规范
for循环里面严禁执行db操作,严重影响性能,数据量大的时候很有可能把cpu打满了。
for循环里面查询、插入、更新数据,都有批量的解决方案,查询用in语句一次查询,插入和更新<foreach>插入和更新。如果数据量大一定要分页查询,其实超过几百上千条基本都是因为业务上设计不合理,可以加时间或者其他条件筛选,实在要查几百上千条数据一定要分页查询。
总结:
博主大部分时间都是在优化DB操作规范,大部分耗时的接口也都是因为不规范的DB操作导致的。一般后台接口用时超过1-2秒基本都有优化空间,大部分接口响应时间应该控制在1秒内。上述那些超过10秒的接口在优化之后,也可以在一秒之内返回。最后:谁都有接手别人代码的时候,如果你接手的代码写的很烂,那么希望经过你手之后,代码执行效率变得更快,代码看上去更优雅,这样你的价值也就提现出来了。在工作当中一定要严格要求自己,才能更好的提高自己,遇见更优秀的自己。为了老板的美好幸福生活,加油吧打工人。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!