转至元数据结尾
转至元数据起始

确定的东西,用断言。

不确定的东西,走校验。


cases:

页面上选择的东西,校验时,可用断言。

页面上输入的东西,校验时,不用断言。

结算提交页面,客户选择taskId、输入支付密码,提交发起结算申请,这时,后端判断taskId、支付密码是否为空,走校验。根据taskId查询到task记录后,可以断言task不为null。

getById(id) 方法里,不能对id断言。


下面代码,第2个 private 方法 getCardBinFromCache,在判断入参 cardNo时, 可以使用断言。

public ResultX<CardBinDTO> selectByCardNo (String cardNo) {
    if (StringUtils.isEmpty(cardNo)){
        return ResultX.error("请求参数为空");
    }
    if (cardNo.length() < BANK_CARD_LENGTH_MIN){
        return ResultX.error("小于卡bin最小限制,无法解析");
    }
    CardBinDTO cardBinDTO = getCardBinFromCache(cardNo);
    if (cardBinDTO == null) {
        。。。
    }
    return ResultX.success(cardBinDTO);
}

private CardBinDTO getCardBinFromCache (String cardNo){
    CardBinDTO cardBinDTO = null;
    //todo: codereview:改用断言更合适
    if (StringUtils.isEmpty(cardNo)){
        log.info("getCardBinForCache请求参数为空");
        return cardBinDTO;
    }
    for (final Integer integer : CARD_BIN_LENS) {
       。。。
    }
    return cardBinDTO;
}




当然,程序校验比较多时,使用 断言+异常捕获 不失是一种比较好的编码方式,因为可以提高代码的整洁度和可维护性。

原始程序校验代码代码重构后
if (StringUtils.isEmpty(bankCardNo)){
	log.info("银行卡号请求参数为空");
    return Result.error("银行卡号请求参数为空");
}
if (bankCardNo.length() < BANK_CARD_LENGTH_MIN){
	log.info("bankCardNo={},无效的银行卡号", bankCardNo);
    return Result.error("无效的银行卡号");
}
if (taskId==null || taskId<=0) {
	log.info("请求参数taskId非法");
    return Result.error("请求参数taskId非法");
}
if (***) {
	log.info("...");
	return Result.error("...");
}
try {
	AssertUtil.notEmptyString(bankCardNo, "银行卡号请求参数为空");
	AssertUtil.isTrue(bankCardNo.length() >= BANK_CARD_LENGTH_MIN, "无效的银行卡号");
	AssertUtil.isTrue(NumberUtil.isPositive(taskId), "请求参数taskId非法");
	AssertUtil.***;	
} catch (IllegalArgumentException e) {
	log.info(e.getMessage());
	return Result.error(e.getMessage());
}




编写评论...