注释
1. 所有public类均需写/*/类型注释,可通过设置IDE模板实现
/**
* 支付业务,包括微信、支付宝的支付请求与回调
*
* @author XXX
* @mail XXX@163.com
* @date 2016-7-18 20:02:06
* @copyright ©2016 mamian.net All Rights Reserved
*/
@Component
@Transactional
public class PayServiceImpl implements PayService {
...
}
2. 所有public方法均需写/*/类型注释
/**
* 用户登录
*
* @param visitor 访问来源
* @param version 访问的版本
* @param loginName 用户名
* @param password 密码
* @return
*/
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ModelAndView login(@RequestHeader("visitor") Visitor visitor,
@RequestHeader("version") int version,
@RequestParam(value="loginName") String loginName,
@RequestParam(value="password") String password)
3. 所有方法内的代码,如需要注释,使用//类型注释
public Result create(Task task) {
try {
//添加城市
task.addCity();
//添加省份
task.addProvince();
//添加日志
addLog();
...
} catch (Exception e) {
log.error("...", e);
...
}
}
4. POJO类、枚举、interface的成员需使用/*/类型注释说明其含义
public class User extends BaseObject {
/**
* id
*/
@Getter
@Setter
private String id;
/**
* 手机号
*/
@Getter
@Setter
private String mobile;
/**
* 真实姓名
*/
@Getter
@Setter
private String name;
/**
* 用户名
*/
@Getter
@Setter
private String loginName;
}
命名
1. 类名、变量名、方法名使用驼峰命名法命名(类名首字母大写、变量名首字母小写)
public class PayService {
...
}
public void getDefaultValue (){
int defaultValue = testService.getDefaultValue();
...
}
2. 枚举、常量、变量名需为有意义的字符串,不可出现类似x、i等无法判定含义的字符串。
int x = paymentService.sum();
public static final String ONE = 1;
3. 抽象类使用Abstract前缀,接口使用I前缀,实现类使用Impl后缀。
方法
1. 定义及使用方法时,若参数多于3个,使用竖版方式,且参数要对齐
public Result create(String loginName,
String password,
String name,
String mobile,
String address){
User user = userService.create(CountryCode.CN,
loginName,
password,
name,
mobile,
address);
...
}
2. 过时方法需加注@Deprecated,并注明过期时间
/**
* <strong>不再支持,使用newAssign方法代替</strong>分配任务
* 预计于2016.11.11删除
*
* @param task
* @return
* */
@Deprecated
public boolean assign(Task task)
3. 实现父类与接口的方法,必须加@Override
@Override
public int init(Task task){}
4. 所有类不得出现默认构造函数、全成员构造函数、字段的get与set方法,需使用注解代替
不推荐的方式:
public class User extends BaseObject { /** * 手机号 */ private String mobile; /** * 真实姓名 */ private String name; public User () {} public User (String mobile, String name) { this.mobile = mobile; this.name = name; } public String getMobile () { return mobile; } public void setMobile (String mobile) { this.mobile = mobile; } public String getName () { return name; } public void setName (String name) { this.name = name; } }
推荐的方式:
@NoArgsConstructor @AllArgsConstructor public class User extends BaseObject { /** * 手机号 */ @Getter @Setter private String mobile; /** * 真实姓名 */ @Getter @Setter private String name; }
代码
1. 业务代码中不可出现与特定数字与字符串的比较,需使用Constant代替,注意用大写
不推荐的方式:
if (type == 1) { ... } else if (type == 2) { ... } if (type.equals("name")) { ... } else if (type.equals("logo")) { ... }
推荐的方式:
public interface OpTypeConstant { /** * 入账 * */ int IN = 1; /** * 出账 * */ int OUT = 2; } if (OpTypeConstant.IN == type) { ... } else if (OpTypeConstant.OUT == type) { ... }
2. 无效的代码、方法要及时清理
- 清理过时代码时要注意检测是否还被引用。
3. 合理确定代码分层粒度,每一层方法不宜超过100行
4. 循环不得超过3层
5. 相似功能的方法要挨着
6. rest api接口返回数据不可为null,不可为数组
7. 更改他人代码
- 不得更改类上的@author,若后续有人修改代码,请在@author后添加修改人员。