技术团队开发规范
本规范作用,促进团队合作,降低维护成本,提高团队开发效率。
适用范围,Web技术团队:后端程序员,前端程序员。
代码审查不以代码量为目的,请写出简洁,优雅,结构清晰的代码。
1.统一开发环境
操作系统:
开发机:Windows 7 或 Windows 10
服务器:Ubuntu 16.04
Java版本: JDK 1.8.0_26x
Java框架:Spring Boot 2.2.x、MyBatis
PHP版本:5.6.x
PHP框架:ThinkPHP 5.1.x
依赖管理:Maven 3.6.x
前端框架:Vue 2.x、Node 12.18.x
数据库:MySQL 5.7 存储引擎:InnoDB
中间件:Redis 6.x
代码库管理:Git
2.技术规范细节
2.1 前后分离
为保证开发进度和可复用性,整体项目采用前后分离并行开发。
2.2 上传资源分离
客户上传文件与项目分离,比如用户上传的文件,使用单独服务器接收,数据库只保存文件相对路径。
2.3 前端
浏览器兼容,须支持主流浏览器,IE9+。
静态文件均归档至约定的目录中。
字符编码统一指定为’UTF-8’。
尽可能组件化开发,降低代码量,提高复用率。
2.4 并发性能
项目需承受一定并发能力,需对关键接口做并发测试。
热点数据做缓存处理,且要考虑数据一致性。
内存、连接池、锁等系统资源及时释放。
接口做幂等处理。
2.5 微服务
如果技术允许,可采用微服务架构。
2.6 安全
接口处做入参检查,防止SQL注入。
一些关键业务接口如短信发送,须做机器防刷机制。
源码保证可编译的情况下,每天定时提交。
数据库连接信息不可外泄,由专人管理。
数据库用户密码等关键数据需做加密处理,不可明文保存。
2.7 命名
命名具有语义化,PHP项目遵循PSR-2代码规范。
类名规范:首字符大写,后面每个单词首字母大写(大驼峰式)。
变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
方法名规范:同变量名。
文件命名:同类名。
数据库命名:数据库命名的时候尽量保证数据库的名称和项目工程的名称一致,全部使用小写字母,数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头。
2.8 注释
每个功能函数、方法、接口、类都要有对应注释,各个关键业务代码段,也需注释。
2.9 数据库
数据库设计满足数据库三范式
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余;
没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。
正确认识数据冗余
主键与外键在多表中的重复出现, 不属于数据冗余。非键字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。高级冗余不是字段的重复出现,而是字段的派生出现。
例:商品中的“单价、数量、金额”三个字段,“金额”就是由“单价”乘以“数量”派生出来的,它就是冗余,而且是一种高级冗余。冗余的目的是为了提高处理速度。只有低级冗余才会增加数据的不一致性,因为同一数据,可能从不同时间、地点、角色上多次录入。因此,我们提倡高级冗余(派生性冗余),反对低级冗余(重复性冗余)。
使用“三少原则”防止数据库打补丁式设计
一个数据库中表的个数越少越好。只有表的个数少了,才能说明系统的E-R图少而精,去掉了重复的多余的实体,形成了对客观世界的高度抽象,进行了系统的数据集成,防止了打补丁式的设计;
一个表中组合主键的字段个数越少越好。因为主键的作用,一是建主键索引,二是做为子表的外键,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间;
一个表中的字段个数越少越好。只有字段的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗余,更重要的是督促设计者学会将主表中的一部分内容拉出去,另外单独建一个子表;
适当使用索引,合理使用联合索引
省市区、经纬地图坐标统一
省市区参考全国统计用区划代码和城乡划分代码
2.10 日志
JAVA服务端日志使用lombok->Slf4j注解,存放至:/var/log/spring/项目名/模块名.log。
PHP服务端日志统一存放在 项目路径/runtime/log/ 下。
2.11 JAVA
善用lombok简化代码量。
统一入参处理,使用 jsr 303 规范验证入参。
统一异常处理。
统一分页处理。
2.12 接口
统一接口返回结构(Java可使用mtool工具类):
{
"code": 200,
"message": "success",
"data": Object
}
code: 返回状态码
参考 RFC 2616 规范
code区间 | 类型 | 含义 | |
---|---|---|---|
1** | 100-199 | 信息 | 服务器接收到请求,需要请求者继续执行操作 |
2** | 200-299 | 成功 | 请求被成功接收并处理 |
3** | 300-399 | 重定向 | 需要进一步的操作以完成请求 |
4** | 400-499 | 客户端错误 | 请求包含语法错误或无法完成请求 |
5** | 500-599 | 服务器错误 | 服务器在处理的时候发生错误 |
message:状态描述
data: 返回数据,数据类型根据实际项目约定。