良好的代码习惯:
- 保持一个风格的代码格式
- 合理使用空行:
- 空行是为了便于阅读,一般而言,每行后面都加空行等于都没加空行,都不利于阅读
- 一般使用规则:联系紧密的内容之间不要用空行隔开,将不联系不紧密的内容用空行隔开
- java 命名规范:
- 类名:大驼峰形式,即首字母大写的驼峰,如Object、StringBuffer
- 方法名:小驼峰形式,即第一个单词首字母小写,其余单词首字母大写,如 readObject() 等
- 常量:全大写,各个单词之间使用下划线隔开,如 TOTAL_PAGE、UPDATE_ERROR 等
- 枚举类:枚举类命名以 Enum 或 Type 结尾
- 枚举类成员:全大写,各个单词之间使用下划线隔开,如 TOTAL_PAGE、UPDATE_ERROR 等
- 特殊类:
- 抽象类:以 Abstract 开头
- 异常类:以 Exception 结尾
- 实现类:以 Impl 结尾
- 测试类:以要测试的类名开始,以 Test 结尾
- 包名:同一使用小写,点分隔符之间有且只有一个自然语义的单词,包名统一使用单数形式,通常为 com 或 org 开头,加上公司名,然后再加上组件或者功能模块名
- 日志规范:关注四个级别的日志
- ERROR:表示不能自己恢复的错误,需要立即被关注和解决
- WARN:对于可预知的业务问题,最好不用使用 ERROR 输出日志,避免污染报警系统;同样,也需要设置一个 WARN 阈值,方便通知处理
- INFO:记录系统基本的运行过程和运行状态
- DEBUG:输出调试信息,用于开发环境
- 异常规范
异常规范详解:
1、异常处理:一般在业务系统中设置两个异常,且都设置为 Unchecked Exception
- BizException:业务异常
- SysException:系统异常
为什么不设置为 Checked Exception 呢?
因为破坏了开闭原则,如果在一个方法中抛出了 Checked Exception,而 catch 语句在 3 个层级之上,那么就需要在 catch 语句和抛出异常之间的每个方法签名中声明该异常,这意味着在软件中修改较 低层级时,都将波及较高层级,修改好的模块必须重新构建、发布,即便它们自身所关注的任何东西都没有被改动过。
针对业务异常的处理:类似AOP,在应用处理请求的切面上进行异常处理收敛
2、错误码
- 对错误码进行编号
- 显性化错误码:
- 即将错误码命名定义成3个部分:类型 + 场景 + 自定义标识
- 错误类型约定:
- P:ParamException,参数异常
- B:BizException,业务异常
- S:SystemException,系统异常 | 错误类型 | 错误码约定 | 举例 | | —- | —- | —- | | 参数异常 | P_XX_XX | P_Customer_NameIsNull:客户姓名不能为空 | | 业务异常 | B_XX_XX | B_Customer_NameAlreadyExist:客户姓名已经存在 | | 系统异常 | S_XX_XX | S_Unknown_Error:位置系统错误 |