模块化开发规范
命名规范
1.所有的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式
2.方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase 风格,必须遵从驼峰形式。如localValue
3.常量命名全部大写 如MAX_COUNT
4.包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用
单数形式,但是类名如果有复数含义,类名可以使用复数形式 如 com.huluwa.cc.fxq.company.web
5.接口和实现类的命名有两套规则:
1)对于 Service 和DAO 类,基于SOA 的理念,暴露出来的服务一定是接口,内部
的实现类用Impl 的后缀与接口区别。
正例:CacheServiceImpl 实现CacheService 接口。
2)如果是形容能力的接口名称,取对应的形容词做接口名(通常是–able 的形式)。
正例:AbstractTranslator 实现Translatable。
6.枚举类名建议带上Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。
说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。
7类的命名使用驼峰式命名的规范,但是以下情景例外: DTO / VO均大写
如UserService CompanyDTO CompanyVO
8.Controller文件命名规则,采用项目名+小模块名,如公司模块里面的部门模块,@RequestMapping(value=/company/department),接口名的Mapping则为动作名或者功能名
9.项目名采用fxq-模块名的方式,如签署模块项目名为fxq-sign
10.如果在模块或者接口,类,方法中使用了设计模式,那么请在命名的时候体现出来。
如TokenFactory,LoginProxy等
开发规范
1.序列化类新增属性时,请不要修改serialVersionUID 字段,避免反序列失败;如
果完全不兼容升级,避免反序列化混乱,那么请修改serialVersionUID 值。
说明:注意serialVersionUID 不一致会抛出序列化运行时异常。
2.构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在init 方法中。
3.对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会造
成死锁。
4.在一个switch 块内,每个 case 要么通过break/return 等来终止,要么注释说明程
序将继续执行到哪一个case 为止;在一个switch 块内,都必须包含一个default 语句并且
放在最后,即使它什么代码也没有
5.不允许任何即未经定义的常量直接出现在代码中 如”fxq” + uuid
6.尽量不要使用一个常量类维护所有常量,按常量功能进行归类,分开维护
7.所有的覆写方法,必须加@Override 注解
8.定义DO/DTO/VO 等POJO 类时,不要设定任何属性默认值。
9.pojo类getter和setter方法里面,不要增加业务逻辑代码
10.try-catch里面的代码尽量不要包含稳定的代码,只有异常出错的才可以放进try-catch
11.所有关于流这类对象的关闭连接或者需要释放的资源,需要关闭连接和释放资源
12.涉及到跨模块调用尤其调用扣费模块需要用到事务相关,需要用分布式事务
13.扣费模块相关需要用乐观锁来解决数据一致性问题
注释规范
1.类、类属性、类方法的注释必须使用Javadoc 规范,使用/内容*/格式,不得使用// xxx 方式。
2.谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除
3.接口要有注释,来解释接口是干嘛的,如果有派生接口或者功能相近的接口也必须要增加注释
4.重要逻辑必须要增加注释
日志规范
1.应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J 中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Abc.class);
2.对trace/debug/info 级别的日志输出,必须使用条件输出形式或者使用占位符的方式。
说明:logger.debug(“Processing trade with id: “ + id + “ and symbol: “ + symbol);
3.生产环境禁止输出debug 日志;有选择地输出 info 日志;如果使用warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘撑爆,并记得及时删除这些观察日志。
4.可以使用warn 日志级别来记录用户输入参数错误的情况,避免用户投诉时,无所适 从。注意日志输出的级别,error 级别只记录系统逻辑出错、异常等重要的错误信息。如非必要,请不要在此场景打出error 级别。
MySQL 数据库规范**
1.表达是与否概念的字段,必须使用isxxx 的方式命名,数据类型是unsigned tinyint (1 表示是,0 表示否)。
说明:任何字段如果为非负数,必须是unsigned。
正例:表达逻辑删除的字段名is_deleted,1 表示删除,0 表示未删除。
2.表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
说明:MySQL 在 Windows 下不区分大小写,但在Linux 下默认是区分大小写。因此,数据库
名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。
正例:aliyun_admin,rdc_config,level3_name
3.表名禁用保留字,如desc、range、match、delayed 等,请参考MySQL 官方保留字。
4.数据库索引命名规范
主键索引pk字段名
唯一索引uk字段名
普通索引idx字段名
5.小数类型为decimal,禁止使用 float 和double
6.如果存储的字符串长度几乎相等,使用char 定长字符串类型
7.varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。
8.表的命名采用“模块名_表的作用”
9.如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释