读书人

收拾经验提高代码质量

发布时间: 2012-12-24 10:43:13 作者: rapoo

整理经验,提高代码质量

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());
??????????? }
??????? }

读书人网 >软件开发

热点推荐