原文网址: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-core:主体项目。包括:业务(Controller、Service、Mapper、Entity)、配置类、工具类等。

业务代码的结构

  1. 按每个表对应一个包,Controller、Service、Mapper、Entity分别放到一个包里。
  2. 添加一个facade包(Controller调用Facade,Facade调用Service或Mapper)
    1. 使用MyBatis-Plus后,建议将Service和Mapper都作为数据访问层,新建facade包作为业务层,如果业务多了可以在facade层拆分类文件。

例如:

优点

  1. 模块化,业务分离清晰
  2. 开发速度快(只需关注自己模块代码即可)

思考

有其他的划分方式是: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;}
}

所有用到的地方都用枚举来表示。比如:

  1. Controller:会自动将前端传过来的字符串转为枚举类(根据name()来转换)。
  2. 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:

点击“上传”

点击“确认”

查看接口

优点

  1. 减少接口文档的代码冗余
  2. 可快速导入接口

git提交规范

说明

将git分支分为主分支和临时分支。

  • 主分支:test(测试)、pre(预发布)、prod(生产)
  • 临时分支:需求点和bug修改

开发与提交流程

  1. 每个修改点(需求或bug)都要从prod新拉分支
  2. 合代码(合代码时都是从临时分支cherry pick到目的分支(主分支))
    1. 往test分支合代码时,需要先把自己的临时分支压缩为一个点,再cherry pick到test。
    2. 往pre分支合代码时,从临时分支cherry pick到pre分支,不要从test分支cherry pick。(因为test肯定有没测试的,不能上pre)
    3. 往prod分支合代码时,组员告诉组长自己的提交点,由组长从临时分支cherry pick到prod分支(因为pre肯定有没测试的,不能上正式)
  3. 远程有更新时,要rebase(以远程为基准),不要用merge(以本地为基准)
  4. 修改点上线(临时分支cherry pick到master)后,删除临时分支(防止分支过多)
  5. 定期(两三周)对test进行清理,删除test并重新从prod拉分支,作为test分支。(防止test与prod差距较远,导致临时分支往test分支合代码时冲突很多)
  6. 定期(两三周)对pre进行清理,删除pre并重新从prod拉分支,作为pre分支。(防止pre与prod差距较远,导致临时分支往pre分支合代码时冲突很多)

优点

以上步骤是我之前所在某个公司的提交流程,按这个流程来做,可以做到:合代码基本不出问题、合代码速度快(一般不会超过3分钟)。

以上步骤每一步都是有原因的:

  • 从prod拉新分支:可保证新分支代码是基于生产的,可以保证新分支是纯粹的自己的修改点
  • 合代码时都是从临时分支cherry pick到目的分支:可保证不会将其他人代码合到目的分支
  • 使用rebase而不是merge:git提交清晰,而且这是人类的正常思维:以服务器的代码为准,而不是以自己本地的代码为准。
  • 定期删除test、pre并从prod拉分支:从临时分支合到主分支时基本不会有冲突;而且可以删除test里无用的代码

感言

一个正常的功能点,如果合代码超过10分钟,那么,项目的git管理大概率有问题。如果超过30分钟,项目的git管理问题有点儿大。如果超过一个小时,那么...

Java后端开发常用规范相关推荐

  1. 科普:Java 后端开发常用的 10 种第三方服务

    严格意义上说,所有软件的第三方服务都可以自己开发,不过从零到一是需要时间和金钱成本的.就像我们研发芯片,投入了巨大的成本,但仍然没有取得理想的成绩,有些事情并不是一朝一夕,投机取巧就能完成的. Jav ...

  2. Java 后端开发常用的第三方服务 TOP10

    严格意义上说,所有软件的第三方服务都可以自己开发,不过从零到一是需要时间和金钱成本的.就像我们研发芯片,投入了巨大的成本,但仍然没有取得理想的成绩,有些事情并不是一朝一夕,投机取巧就能完成的. Jav ...

  3. 第三方服务 “TOP10”Java 后端开发常用的

    严格意义上说,所有软件的第三方服务都可以自己开发,不过从零到一是需要时间和金钱成本的.就像我们研发芯片,投入了巨大的成本,但仍然没有取得理想的成绩,有些事情并不是一朝一夕,投机取巧就能完成的. Jav ...

  4. 【实验室培训】大学生的Java后端开发学习之路(从App开发讲起)

    文章目录 前言 一.浅谈如何开发一款App 1.一个好的idea 2.根据这个idea完善好具体的需求 3.分工合作 4.设计阶段 ①UI设计 ②接口设计 ③架构设计 5.开发阶段 6.测试阶段 7. ...

  5. Java后端开发需要掌握什么

    Java后端开发需要掌握什么? 需要熟悉Apache.NginX.Tomcat.WildFly.Weblogic等Web服务器和应用服务器的使用,熟悉面向对象的设计原则,熟悉基于JSP和Servlet ...

  6. mac下后端开发常用软件

    简介 换了台macbook,接下来分享下我在mac里安装的常用软件,也方便自己以后重装 Intellij IDEA Java开发神器,开发效率高,功能非常强大,社区版阉割了太多功能,满足不了开发需求, ...

  7. Java 后端开发面试总结:25 个技术专题(最全面试攻略)

    另送福利: java 面试准备 准确的说这里又分为两部分: 1.Java 刷题 2.算法刷题 Java 刷题:此份文档详细记录了千道面试题与详解:  !     私信我回复[03]即可免费获取 很多人 ...

  8. Java后端开发工程师技术栈整理

    文章目录 Java后端开发工程师技术栈整理 常用工具 Java IDE 数据库客户端 数据库建模工具 SSH客户端 文本编辑器 Markdown编辑器 API调试工具 浏览器 压力测试工具 DevOp ...

  9. 震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗?

    据说,2022 年算法岗遇冷,BAT 暑期实习甚至收不到简历,Java 反而爆炸. 难道,Java 的春天(映射 Spring 全家桶)又要来了吗?作为 Java 领域的优质创作者(见下图),又可以在 ...

  10. 【软件创新实验室2021年寒假集训】Java后端开发漫谈及感悟分享

    系列文章目录 [软件创新实验室2021年寒假集训]汇总篇 20级Java培训 第一天:[软件创新实验室2021年寒假集训]Java技术培训--Java前置知识学习 第二天:Java基础(一) 第三天: ...

最新文章

  1. [MySql]锁表与解锁
  2. matlab--矩阵运算
  3. Windows 8 系统快捷键热键列表收集
  4. 一个简单地C语言程序展示RSA加密原理
  5. vue.js+boostrap最佳实践
  6. 用javascript实现以下功能!_用python80行代码实现一个微信消息撤回捕捉功能
  7. 关于无序分类变量量化的处理思考
  8. Win11预览版怎么更新正式版?
  9. 本科毕设完整流程和注意事项
  10. Axure 制作过滤筛选栏
  11. Mysql联表update数据
  12. python卡方拟合性检验_卡方检验
  13. 仿淘宝的详情页图片切换
  14. 怎么将计算机的触摸鼠标锁定,戴尔电脑怎么将触控板锁定?
  15. Android中EditText中文英文长度控制
  16. matlab中给信号添加高斯白噪声的两种方法,awgn计算过程,randn函数
  17. java全栈系列之JavaSE--命令行传递参数与可变参数021
  18. 第八章 自我反省的功夫
  19. Zigbee 概念理解
  20. 破解网通宽带我世界实现路由共享上网

热门文章

  1. 快手通过标签添加好友_快手开通直播权限添加垂直标签
  2. pads9.5在win10中选项字体显示不全问题解决补丁下载(网盘免费下载)
  3. 为什么CSDN登陆是明文传输账户密码
  4. 用vb6.0编写简易计算机,vb小程序(用vb编写简单小程序实例)
  5. 计算机蓝屏代码大全,电脑蓝屏代码大全 菜鸟必看
  6. oracle中怎么sqlprompt,oracle提示符sqlprompt
  7. 中国建设银行-跨境易支付
  8. VMware 中软盘镜像文件 *.flp 使用方法
  9. [noip2013]货车运输
  10. 简单有用的jar包下载方法及地址