Java后端开发常用规范
原文网址:Java后端开发常用规范_IT利刃出鞘的博客-CSDN博客
简介
本文介绍Java后端开发的一些规范。持续更新。
本规范是本人总结出来的,可提高项目的可维护性、提高扩展性、提高开发速度。本文可以解决项目中效率低下、难以维护、让人心累的痛点等问题。
项目的模块划分
模块的划分
单个项目分为xxx-api模块和xxx-core模块。比如用户项目,分为:user-api、user-core。
- xxx-api:用于让其他项目使用(引入依赖)。包括:DTO、本项目的feign定义。
- xxx-api放的应该是本项目的feign,而不是调用其他项目的feign。想调本项目的其他项目直接引入这个xxx-api即可。如果自己想用feign调用其他项目,让其他项目提供出feign,写到他们自己的yyy-api中。
- 这种方式与dubbo的写法类似,符合rpc方法暴露和调用流程。
- 如果xxx-api放置调用其他项目(假设为yyy)的feign,若yyy的这个接口又被另外的项目(假设为zzz)调用了,那么zzz又要写一遍feign。这样很笨拙!
- xxx-api放的应该是本项目的feign,而不是调用其他项目的feign。想调本项目的其他项目直接引入这个xxx-api即可。如果自己想用feign调用其他项目,让其他项目提供出feign,写到他们自己的yyy-api中。
- xxx-core:主体项目。包括:业务(Controller、Service、Mapper、Entity)、配置类、工具类等。
业务代码的结构
- 按每个表对应一个包,Controller、Service、Mapper、Entity分别放到一个包里。
- 添加一个facade包(Controller调用Facade,Facade调用Service或Mapper)
- 使用MyBatis-Plus后,建议将Service和Mapper都作为数据访问层,新建facade包作为业务层,如果业务多了可以在facade层拆分类文件。
例如:
优点
- 模块化,业务分离清晰
- 开发速度快(只需关注自己模块代码即可)
思考
有其他的划分方式是:xxx-api、xxx-common、xxx-entity、xxx-service、xxx-web。个人感觉这样的划分很差。它的缺点是:1.不符合业务模块化思想 2.开发速度慢(同一个业务的Entity、Service、Controller被拆开了,写的时候看代码要吐血)
使用枚举(不要用数字)
说明
要用枚举来表示类型,不要用数字。比如:有三种支付方式:微信、支付宝、银行卡,则这样定义枚举:
package com.example.pay;public enum PayType {ALIPAY("支付宝支付"),WECHAT_PAY("微信支付"),BANK_CARD_PAY("银行卡支付");/*** 描述*/private final String description;PayType(String description) {this.description = description;}public String getDescription() {return description;}
}
所有用到的地方都用枚举来表示。比如:
- Controller:会自动将前端传过来的字符串转为枚举类(根据name()来转换)。
- Entity:写数据:自动将枚举对象的name()值写入数据库;读数据:根据name()转为枚举
详细用法见:SpringBoot--在Entity(DAO)中使用枚举类型_IT利刃出鞘的博客-CSDN博客
优点
可读性好
不要用数字表示类型
1:支付宝支付;2:微信支付;3:银行卡支付
原因:可读性极差,排查问题也麻烦。比如:前端页面上看到了2这个类型,还要看接口文档或者问后端这是什么意思,浪费时间!
接口文档
说明
使用Knife4j+Yapi。
Knife4j
Knife4j的用法见这里。例如:
Yapi
使用Yapi将Knife4j的接口信息导入进来:将服务的真实ip+端口与上图中的“分组Url”拼接:http://ip:端口/v3/api-docs?group=all,然后导入到Yapi:
点击“上传”
点击“确认”
查看接口
优点
- 减少接口文档的代码冗余
- 可快速导入接口
git提交规范
说明
将git分支分为主分支和临时分支。
- 主分支:test(测试)、pre(预发布)、prod(生产)
- 临时分支:需求点和bug修改
开发与提交流程
- 每个修改点(需求或bug)都要从prod新拉分支
- 合代码(合代码时都是从临时分支cherry pick到目的分支(主分支))
- 往test分支合代码时,需要先把自己的临时分支压缩为一个点,再cherry pick到test。
- 往pre分支合代码时,从临时分支cherry pick到pre分支,不要从test分支cherry pick。(因为test肯定有没测试的,不能上pre)
- 往prod分支合代码时,组员告诉组长自己的提交点,由组长从临时分支cherry pick到prod分支(因为pre肯定有没测试的,不能上正式)
- 远程有更新时,要rebase(以远程为基准),不要用merge(以本地为基准)
- 修改点上线(临时分支cherry pick到master)后,删除临时分支(防止分支过多)
- 定期(两三周)对test进行清理,删除test并重新从prod拉分支,作为test分支。(防止test与prod差距较远,导致临时分支往test分支合代码时冲突很多)
- 定期(两三周)对pre进行清理,删除pre并重新从prod拉分支,作为pre分支。(防止pre与prod差距较远,导致临时分支往pre分支合代码时冲突很多)
优点
以上步骤是我之前所在某个公司的提交流程,按这个流程来做,可以做到:合代码基本不出问题、合代码速度快(一般不会超过3分钟)。
以上步骤每一步都是有原因的:
- 从prod拉新分支:可保证新分支代码是基于生产的,可以保证新分支是纯粹的自己的修改点
- 合代码时都是从临时分支cherry pick到目的分支:可保证不会将其他人代码合到目的分支
- 使用rebase而不是merge:git提交清晰,而且这是人类的正常思维:以服务器的代码为准,而不是以自己本地的代码为准。
- 定期删除test、pre并从prod拉分支:从临时分支合到主分支时基本不会有冲突;而且可以删除test里无用的代码
感言
一个正常的功能点,如果合代码超过10分钟,那么,项目的git管理大概率有问题。如果超过30分钟,项目的git管理问题有点儿大。如果超过一个小时,那么...
Java后端开发常用规范相关推荐
- 科普:Java 后端开发常用的 10 种第三方服务
严格意义上说,所有软件的第三方服务都可以自己开发,不过从零到一是需要时间和金钱成本的.就像我们研发芯片,投入了巨大的成本,但仍然没有取得理想的成绩,有些事情并不是一朝一夕,投机取巧就能完成的. Jav ...
- Java 后端开发常用的第三方服务 TOP10
严格意义上说,所有软件的第三方服务都可以自己开发,不过从零到一是需要时间和金钱成本的.就像我们研发芯片,投入了巨大的成本,但仍然没有取得理想的成绩,有些事情并不是一朝一夕,投机取巧就能完成的. Jav ...
- 第三方服务 “TOP10”Java 后端开发常用的
严格意义上说,所有软件的第三方服务都可以自己开发,不过从零到一是需要时间和金钱成本的.就像我们研发芯片,投入了巨大的成本,但仍然没有取得理想的成绩,有些事情并不是一朝一夕,投机取巧就能完成的. Jav ...
- 【实验室培训】大学生的Java后端开发学习之路(从App开发讲起)
文章目录 前言 一.浅谈如何开发一款App 1.一个好的idea 2.根据这个idea完善好具体的需求 3.分工合作 4.设计阶段 ①UI设计 ②接口设计 ③架构设计 5.开发阶段 6.测试阶段 7. ...
- Java后端开发需要掌握什么
Java后端开发需要掌握什么? 需要熟悉Apache.NginX.Tomcat.WildFly.Weblogic等Web服务器和应用服务器的使用,熟悉面向对象的设计原则,熟悉基于JSP和Servlet ...
- mac下后端开发常用软件
简介 换了台macbook,接下来分享下我在mac里安装的常用软件,也方便自己以后重装 Intellij IDEA Java开发神器,开发效率高,功能非常强大,社区版阉割了太多功能,满足不了开发需求, ...
- Java 后端开发面试总结:25 个技术专题(最全面试攻略)
另送福利: java 面试准备 准确的说这里又分为两部分: 1.Java 刷题 2.算法刷题 Java 刷题:此份文档详细记录了千道面试题与详解: ! 私信我回复[03]即可免费获取 很多人 ...
- Java后端开发工程师技术栈整理
文章目录 Java后端开发工程师技术栈整理 常用工具 Java IDE 数据库客户端 数据库建模工具 SSH客户端 文本编辑器 Markdown编辑器 API调试工具 浏览器 压力测试工具 DevOp ...
- 震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗?
据说,2022 年算法岗遇冷,BAT 暑期实习甚至收不到简历,Java 反而爆炸. 难道,Java 的春天(映射 Spring 全家桶)又要来了吗?作为 Java 领域的优质创作者(见下图),又可以在 ...
- 【软件创新实验室2021年寒假集训】Java后端开发漫谈及感悟分享
系列文章目录 [软件创新实验室2021年寒假集训]汇总篇 20级Java培训 第一天:[软件创新实验室2021年寒假集训]Java技术培训--Java前置知识学习 第二天:Java基础(一) 第三天: ...
最新文章
- [MySql]锁表与解锁
- matlab--矩阵运算
- Windows 8 系统快捷键热键列表收集
- 一个简单地C语言程序展示RSA加密原理
- vue.js+boostrap最佳实践
- 用javascript实现以下功能!_用python80行代码实现一个微信消息撤回捕捉功能
- 关于无序分类变量量化的处理思考
- Win11预览版怎么更新正式版?
- 本科毕设完整流程和注意事项
- Axure 制作过滤筛选栏
- Mysql联表update数据
- python卡方拟合性检验_卡方检验
- 仿淘宝的详情页图片切换
- 怎么将计算机的触摸鼠标锁定,戴尔电脑怎么将触控板锁定?
- Android中EditText中文英文长度控制
- matlab中给信号添加高斯白噪声的两种方法,awgn计算过程,randn函数
- java全栈系列之JavaSE--命令行传递参数与可变参数021
- 第八章 自我反省的功夫
- Zigbee 概念理解
- 破解网通宽带我世界实现路由共享上网
热门文章
- 快手通过标签添加好友_快手开通直播权限添加垂直标签
- pads9.5在win10中选项字体显示不全问题解决补丁下载(网盘免费下载)
- 为什么CSDN登陆是明文传输账户密码
- 用vb6.0编写简易计算机,vb小程序(用vb编写简单小程序实例)
- 计算机蓝屏代码大全,电脑蓝屏代码大全 菜鸟必看
- oracle中怎么sqlprompt,oracle提示符sqlprompt
- 中国建设银行-跨境易支付
- VMware 中软盘镜像文件 *.flp 使用方法
- [noip2013]货车运输
- 简单有用的jar包下载方法及地址