🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[info] 1.【强制】POJO 类中布尔类型的变量,都不要加 is。 否则部分框架解析会引起序列化错误。 反例:定义为基本数据类型 `boolean isSuccess`;的属性,它的方法也是 `isSuccess()`,RPC 框架在反向解析的时候,“以为”对应的属性名称是 `success`,导致属性获取不到,进而抛出异 常。 >[danger] 2.【推荐】接口类中的方法和属性不要加任何修饰符号(public 也不要加) 保持代码的简洁性,并加上有效的 Javadoc 注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。 >[warning] 3.【参考】各层命名规约 **Service/DAO 层方法命名规约** 1. 获取单个对象的方法用 `get` 做前缀。 2. 获取多个对象的方法用 `list` 做前缀. 3. 获取统计值的方法用 `count` 做前缀。 4. 插入的方法用 `save`(推荐)或 `insert` 做前缀。 5. 删除的方法用 `remove`(推荐)或 `delete` 做前缀。 6. 修改的方法用 `update` 做前缀。 **领域模型命名规约** 1. 数据对象:`xxxDO`,xxx 即为数据表名。 2. 数据传输对象:`xxxDTO`,xxx 为业务领域相关的名称。 3. 展示对象:`xxxVO`,xxx 一般为网页名称。 4. `POJO` 是 `DO/DTO/BO/VO` 的统称,禁止命名成 `xxxPOJO`。 >[success] 4.基本类型与包装类型的使用标准 【强制】所有的 `POJO` 类属性必须使用包装数据类型 【强制】RPC 方法的返回值类型和参数必须使用包装数据类型 【推荐】所有的局部变量使用基本数据类型 > 说明:`POJO` 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何 > NPE 问题,或者入库检查,都由使用者来保证。 > 正例:数据库的查询结果可能是 null,因为自动拆箱,用基本数据类型接收有 NPE 风险。 > 反例:比如显示成交总额涨跌情况,即正负 x%,x 为基本数据类型,调用的 RPC 服务,调用 > 不成功时,返回的是默认值,页面显示为 0%,这是不合理的,应该显示成中划线。所以包装 > 数据类型的 null 值,能够表示额外的信息,如:远程调用失败,异常退出。 >[info] 5.【强制】`POJO`类必须写`toString`方法。 使用IDE中的工具,自动生成,如果继承了另一个`POJO`,注意在前面加一下`super.toString`。 使用了`JPA/Hibernate`框架,不要使用 Lombok 的`@toString`注解,有循环调用导致内存溢出的 bug。 >[warning] 6.使用索引访问String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛`IndexOutOfBondsException` 的风险. >[success] 7.【推荐】循环体内,字符串的连接方式,使用`StringBuilder` 的 `append` 方法进行扩展。 说明:反编译出的字节码文件显示每次循环都会 `new` 出一个 `StringBuilder` 对象,然后进行 `append` 操作,最后通过 `toString` 方法返回 `String` 对象,造成内存资源浪费。 反例: ```java String str = "start"; for (int i = 0; i < 100; i++) { str = str + "hello"; } ``` >[danger] 8.【推荐】`final` 可以声明类、成员变量、方法、以及本地变量,下列情况使用 `final` 关键字: 1. 不允许被继承的类,如:`String` 类。 2. 不允许修改引用的域对象,如:`POJO` 类的域变量。 3. 不允许被重写的方法,如:`POJO` 类的 `setter` 方法。 4. 不允许运行过程中重新赋值的局部变量。 5. 避免上下文重复使用一个变量,使用 `final` 描述可以强制重新定义一个变量,方便更好 地进行重构