整理经验,提高代码质量

1)不要随意增加null判断,通过异常来明确业务要求

下面代码的业务逻辑:如果bspcalendar.getHasProduction()  is true,那么billPeriodService.queryBillPeriod一定有值,这个限制时通过界面控制实现的,这样的话下面的if (billp != null) 判断是没有意义的,由于开发阶段的数据准备问题会导致billPeriodService.queryBillPeriod可能会为空,所以增加if (billp != null) 判断,使得程序不会出现空指针,但如果真得为空了会导致逻辑错误(代码没有报错,但结果不对,给调式问题带来的困难),数据为空的原因是其他代码的错误导致的。更好的做法是如果为空就抛出异常,使得程序中断而不是按错误的路径执行,明确提示开发人员是数据问题导致的,这样开发人员一眼就能知道原因了。并且一定不能为空也是业务逻辑上的要求。

        int month = 1;
        int period = 1;
        BspCalendar bspcalendar = bspCalendarService.queryBspCalendar(param.getYear());
        if (bspcalendar.getHasProduction()) {
            BillPeriod billp = billPeriodService.queryBillPeriod(userInfo.getBspCode(),
                    param.getStartDate());
            if (billp != null) {
                month = praseBillPeriod(billp.getBillPeriod().substring(2))[0];
                period = praseBillPeriod(billp.getBillPeriod().substring(2))[1];
            } 

        } else {
            if (yearHeader.compareTo(param.getStartDate()) > 0) {
                month = 1;
            } else {
                month = DateUtils.getMonth(param.getStartDate());
            }
        }

改进后的代码,增加了为空后的异常。

int month = 1;
        int period = 1;
        BspCalendar bspcalendar = bspCalendarService.queryBspCalendar(param.getYear());
        if (bspcalendar.getHasProduction()) {
            BillPeriod billp = billPeriodService.queryBillPeriod(userInfo.getBspCode(),
                    param.getStartDate());
            if (billp != null) {
                month = praseBillPeriod(billp.getBillPeriod().substring(2))[0];
                period = praseBillPeriod(billp.getBillPeriod().substring(2))[1];
            } else {
                throw new RuntimeException("not exist BillPeriod,it's StartDate is:"
                        + DateUtils.dateToString(param.getStartDate(), "yyyyMMdd"));
            }
        } else {
            if (yearHeader.compareTo(param.getStartDate()) > 0) {
                month = 1;
            } else {
                month = DateUtils.getMonth(param.getStartDate());
            }
        }

猜你喜欢

转载自yourenyouyu2008.iteye.com/blog/1747364