Java开发规范

1.接口命名规范–Restful API

原本格式是动词+资源+by+传参,后来进化为Restful API,思想是以资源为中心

动词用get,post,put,delete请求方法代替,by后面的名词用传参代替。 并且GET方法传参资源ID采用路径传参,除了资源ID外的GET传参统一采用query参数,而其他请求方法传参统一采用json参数。

原来
POST /getInfoByUserId
现在:
GET /user/{id}/info

另外:在嵌套资源的 URL 中使用关系

获取指定订单中所有商品列表。

GET  /order/{id}/products 

获取指定订单中所有指定商品信息。

GET  /order/{orderId}/product/{productId}

其他细节:

【1】连接中多个不可分割的单词,使用中划线拼接。

/user/verify-code

【2】参数使用驼峰拼写

/order/{productId}

【3】指向集合的复数名称

例如:获取所有用户列表接口。

/users

【4】如果有一个接口,并不是 CRUD 操作,这种情况可以使用动词。

例如:向用户发送邮件接口。

/user/{id}/send-mail

2.三层方法命名规范–具体参照阿里巴巴命名规范

基本格式:动词+资源+by+传参

3.领域模型命名规约

  1. 数据对象–表对应的对象

xxxDO,xxx 即为数据表名。

  1. 数据传输对象–一般用于返回数据封装成类

xxxDTO,xxx 为业务领域相关的名称

  1. 展示对象–一般用于接收的数据封装成类

xxxVO,xxx 一般为网页名称。

注意事项:

POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。

4.MybatisPlus条件构造器命名规范

动词+query/update…+Wrapper

5.Java代码中的空格–一般用IDEA格式化解决

java代码哪里需要空格?

  1. 在运算符两侧需要空格,例如:int result = a + b;
  2. 在逗号,分号,关键字后面需要空格 例如:String[] names = {"Alice", "Bob", "Charlie"}; 例如:for (int i = 0; i < 10; i++) { 例如:if (condition) {
  3. 在类名,方法名和左大括号之间需要空格 例如:public class MyClass { 例如:public void myMethod() {
  4. 在类型转换时,强制类型转换符号与类型之间需要空格,例如:(String) object
  5. 空实现接口或类不允许存在空格。
// 正例
public interface AdapterThreadPoolMonitor extends ThreadPoolMonitor {
}

// 反例
public interface AdapterThreadPoolMonitor extends ThreadPoolMonitor {
    
}

6.注释规范

【1】Class、Interface、Enum、@interface 等文件类型,类上注释仅需说明类的意图即可。不需要补充时间和创建人,因为往往开发代码的不止是一个人,容易造成信息干扰。需要的话,查看提交记录即可。

/**
 * 适配第三方框架的线程池
 */
public interface ThreadPoolAdapter {

}

【2】方法上需添加注释,并说明清楚方法的意图(接口实现类无需注释);必要时描述 @param @return

/**
 * 适配第三方框架的线程池
 */
public interface ThreadPoolAdapter {

    /**
     * 修改框架线程池的核心参数
     *
     * @param threadPoolBaseInfo  修改线程池的基础参数
     * @return  线程池核心参数修改结果
     */
    boolean updateThreadPool(ThreadPoolBaseInfo threadPoolBaseInfo);
}

如果方法为内部引用方法,并且方法名称见名知意,无需方法注释。(私有方法尽量通过方法命名说明方法语义)

【3】方法内部的注释,应该新起一行,而不是跟在代码后面,除非是变量。

正例:
// 刷新动态线程池参数
refreshDynamicPool(parameter, executor);

反例:
refreshDynamicPool(parameter, executor); // 刷新动态线程池参数

7.其他

【1】静态变量使用大写,多个单词使用下划线连接。示例:MESSAGE_CENTER_SEND_TYPR。

【2】捕获的异常名称命名为 ex ;捕获异常且不做任何事情,异常名称命名为 ignored。

【3】返回值变量使用 result 命名;循环中使用 each 命名循环变量;map 中使用 entry 代替 each。

result 命名示范:
private void parseDate(String data) {
    Result result = JSONUtil.parseObject(data, Result.class);
    return result;
}
或采用 result 为前缀:
private void parseDate(String data) {
    Result resultDate = JSONUtil.parseObject(data, Result.class);
    return resultDate;
}

each 命名示范:
appNameLeaseMap.values().forEach(each -> appNameLeaseList.add(each));
或是 for 循环:
for (Lease<InstanceInfo> each : appNameLeaseMap.values()) {
    appNameLeaseList.add(each);
}

【4】业务系统中优先使用 Guava、HuTool、Common3 等工具类中的方法,不存在指定方法时再创建自定义工具类,禁止创建相同语义方法的工具类。

备注:定义组件项目时,尽量使用自定义工具类,避免因版本问题导致不确定的异常。

【5】空实现接口或类不允许存在空格。

// 正例
public interface AdapterThreadPoolMonitor extends ThreadPoolMonitor {
}

// 反例
public interface AdapterThreadPoolMonitor extends ThreadPoolMonitor {
    
}

【6】超过 3 层的 if-else 的逻辑判断代码可以使用卫语句、策略模式、 状态模式 等来实现,其中卫语句即代码逻辑先考虑失败、异常、中断、退出等直接返回的情况

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值