1.规范的意义和作用

  • 编码规范可以最大限度的提高团队开发的合作效率
  • 编码规范可以尽可能的减少一个软件的维护成本 , 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护
  • 编码规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码
  • 规范性编码还可以让开发人员养成好的编码习惯,甚至锻炼出更加严谨的思维

2.代码仓库规范

2.1公共组件

  • 公共组件通常指Java库,提供特定问题的处理程序包
  • 公共组件仓库地址:https://git.company.com/java-library-group
  • 公共组件的坐标命名规范
    • 分组编号:<groupId>com.company.library</groudId> 固定取值
    • 组件名称:<artifactId>name</artifactId> name根据组件名称定义
    • 组件版本:<version>x.y.z</versio> x.y.z根据组件实际版本情况定义

2.2服务组件

  • 服务组件通常指可以独立部署,运行,维护的服务程序包
  • 服务组件仓库地址:https://git.company.com/server-microservice-group
  • 应用组件的坐标命名规范
    • 分组编号:<groupId>com.company.server</groudId>固定取值
    • 组件名称:<artifactId>name</artifactId> name根据组件名称定义
    • 组件版本:<version>x.y.z</versio> x.y.z根据组件实际版本情况定义

3开发环境规范

  • 开发环境:JDK1.7+
  • 开发工具:IntelliJ IDEA 2017(安装Lombok Plugin)
  • 构建工具:Maven3.x
  • 代码管理工具:Git /TortoiseGit

4.项目结构规范

4.1简述

一个项目对应代码仓库中的一个仓库,项目结构是指一个基于Maven创建的项目目录结构。公共组件项目,通常会创建一个Maven普通项目。服务组件项目,通常会创建一个Maven聚合项目,并在聚合项目目录下创建多个继承Maven聚合项目的Maven模块,它们一起作为服务组件项目的组成部分。

4.2项目名

  • 要求

    • 英文名称,作为仓库,项目,项目根目录,组件(公共组件,服务组件)的名称
    • 中文名称,用于代码仓库的描述
    • 项目名称和代码仓库的名称保持一致
  • 定义
    • 项目名称通常由团队负责人确定
  • 示例
<groupId>com.company.server</groupId>
<artifactId>data-warehouse-face</artifactId>
<version>1.0.0</version>

4.3模块命名

  • 要求

    • 模块名称:{项目名称}-{模块名称} 模块名称简洁体现职责
    • 模块名字作为模块组件的名称
  • 示例
  • 人脸数据仓库的数据接入模块名称:data-warehouse-face-access

4.4项目目录

  • 项目目录遵循Maven约定目录格式

4.5源码目录

  • 源码目录指:{项目目录}/src/main/
  • 打包定义目录:src/main/assembly
  • 代码目录:src/main/java
  • 资源目录:src/main/resources
    • /db:数据库脚本归档
    • /data:内部依赖数据归档
  • 文档目录:src/main/docs
  • 脚本目录:src/main/bin
    • run-manage.sh 运行管理脚本(通过参数start, stop, status, help info控制程序运行)
    • sh:服务组件启动脚本
    • sh:服务组件停止脚本

5.编码规范

5.1包规范

  • 项目基本包:com.company.{项目英文名(较长时适当简化)}.{模块名(可选)}
  • config:配置类
  • startup:与服务启动相关的类
  • client:提供客户端实现的相关类
  • common:公共类,定义常量类,组件
  • entity: 数据库相关的实体类
  • model:数据模型类(参数模型,数据传输模型等)
  • control:控制层接口
  • service: 服务层
  • dao:数据库访问层

5.2日志记录

  • 统一使用SLF4j接口

5.3异常处理

  • 运行时异常:通过参数检查等方式避免或抛出运行时异常,日志记录
  • 检查异常:检查异常需要捕获,处理,日志记录

5.4接口定义

  • 原则

    • 接口地址定义表明用意
    • 接口地址定义清晰,简洁,无歧义
    • 同一个服务组件的接口定义具有一致性
  • 格式
    • 控制类的顶层地址格式:/{顶层分类名},例如:/library 人员库相关接口的顶层地址
    • 接口定义使用Swagger的API注解说明
    • 标注完整的请求信息,请求方法,请求地址,参数可选性,接口描述
  • 请求方式
    • GET URL-Params
    • POST Form-Data
    • POST RequestBody(JSON格式)
    • POST Mulitpart
  • 响应方式
    • 统一的响应模型

5.5辅助工具

  • 字符串处理:apache common-lang3
  • 时间日期处理:joda-time
  • JSON处理:Gson,Fastjson
  • 集合扩展工具:guava
  • 文件和流处理:commons-io
  • 编解码:commons-codec
  • 建议:尽可能使用开源组件

5.6代码注释

  • 类,接口,枚举顶层注释
  • 接口方法注释
  • 静态方法注释
  • 公开方法注释
  • 类的属性字段注释
  • 常量注释
  • 不限于以上

6.代码控制规范

6.1拉取原则

  • 强制

    • 每日开始工作拉取
  • 约定
    • 提交之前拉取

6.2提交原则

  • 强制

    • 提交代码必须构建成功(比如:编译,打包成共)
    • 提交代码必须完整(比如:少提文件)
    • 提交代码必须忽略到本地临时文件(比如:target, logs, .idea, *.iml,dist 等)
  • 约定
    • 完成一个功能提交
    • 修改一个Bug修改提交
    • 解决冲突提交
    • 每日结束工作提交

6.3提交注释

  • 强制

    • 中文填写注释
    • 注释反映本次提交变更情况
  • 约定
    • 注释描述添加前缀,前缀如下
    • [创建] 通常在项目创建时使用
    • [新增]
    • [修改]
    • [删除]
    • [修复-number] 修复Bug使用,number是Bug编号

7.构建规范

7.1公共组件构建规范

  • 构建输出组件包
  • 构建输出组件源码包
  • 构建发布到公司私有仓库

7.2服务组件构建规范

  • 服务组件包命名:{组件名称}-{版本号}-bin.zip
  • 构建输出到工程根目录下的dist/{组件名称}-{yyyyMMddHH}目录

Springboot 编码规范的更多相关文章

  1. Android的编码规范

    一.Android编码规范 1.学会使用string.xml文件 在我看来,当一个文本信息出现的次数大于一次的时候就必须要使用string.xml 比如一个保存按钮 , 不规范写法: <Butt ...

  2. PHP 高级编程(1/5) - 编码规范及文档编写

    PHP 高级程序设计学习笔记20140612 软件开发中的一个重要环节就是文档编写.他可以帮助未来的程序维护人员和使用者理解你在开发时的思路.也便于日后重新查看代码时不至于无从下手.文档还有一个重要的 ...

  3. 【原】JAVA SE编码规范

    /* * 编码规范: * 1.所有的命名遵循"见名知意"的原则 * 2.所有的命名不允许使用汉字或拼音 * 3.Java的工程命名建议使用小写,比如:oa.crm.cms... * ...

  4. 浅谈Android编码规范及命名规范

    前言: 目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑. 现大框架已经完成,正在进行细节模块上的开发 抽空总结一下Android项目的开发规范:1.编码规范 ...

  5. PHP编码规范PSR-2

    .note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...

  6. Objective-C开发编码规范【转载】

    概要 Objective-C是一门面向对象的动态编程语言,主要用于编写iOS和Mac应用程序.关于Objective-C的编码规范,苹果和谷歌都已经有很好的总结: Apple Coding Guide ...

  7. 前端编码规范之CSS

    "字是门面书是屋",我们不会去手写代码,但是敲出来的代码要好看.有条理,这还必须得有一点约束~ 团队开发中,每个人的编码风格都不尽相同,有时候可能存在很大的差异,为了便于压缩组件对 ...

  8. 前端编码规范之JavaScript

    上次浅谈了下关于CSS的编码规范,大部分童鞋持赞同意见,仍存在一些童鞋不太理解这些规范的意义. 如果是个人或者小作坊开发,其实这些所谓的编码规范也没啥意思,因为大家写好的代码直接就给扔到网上去了,很少 ...

  9. Java Script 编码规范【转】

    Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript ...

随机推荐

  1. 简单的js动态显示当前时间

    js中获取当前时间首先我们要new一个时间对象 var data = new Date(); 然后可以点出很多方法.获取不同的时间格式 自己可以去尝试

  2. sql 中延时操作

    select 1; WAITFOR DELAY '00:00:30'; select 2; --执行完第一个之后会 延时 30秒,才会执行第二个sql

  3. yii2增删改查及AR的理解

    yii2增删改查 // 返回 id 为 1 的客户 $customer = Customer::findOne(1); // 返回 id 为 1 且状态为 *active* 的客户 $customer ...

  4. Python 让PIP源使用国内镜像,提升下载速度和安装成功率

    对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成 ...

  5. Win10安装MySQL5.7.22 解压缩版(手动配置)方法

    1.下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 直接点击下载项 下载后: 2.可以把解压的内容随便放到一个目录,我的是如 ...

  6. jquery checkbox相关 prop方法

    jquery checkbox相关 prop方法 firefox中 checkbox属性checked="checked"已有,但复选框却不显示打钩的原因复选框绑定了click事件 ...

  7. 又一国产855旗舰突然现身:支持5G

    12月28日消息,中国联通官方微博放出了vivo NEX 5G版样机.如图所示,该机搭载骁龙855移动平台及X50 5G调制解调器. 早在8月30日,vivo就宣布完成了面向商用5G智能手机的软硬件开 ...

  8. 通过Java 线程堆栈进行性能瓶颈分析

    改善性能意味着用更少的资源做更多的事情.为了利用并发来提高系统性能,我们需要更有效的利用现有的处理器资源,这意味着我们期望使 CPU 尽可能出于忙碌状态(当然,并不是让 CPU 周期出于应付无用计算, ...

  9. Python学习笔记之面向对象编程(三)Python类的魔术方法

    python类中有一些方法前后都有两个下划线,这类函数统称为魔术方法.这些方法有特殊的用途,有的不需要我们自己定义,有的则通过一些简单的定义可以实现比较神奇的功能 我主要把它们分为三个部分,下文也是分 ...

  10. 20145106 java实验二

    1)复数类ComplexNumber的属性 m_dRealPart: 实部,代表复数的实数部分 m_dImaginPart: 虚部,代表复数的虚数部分 public class ComplexNumb ...