Code-Review-关键路径法
关键路径
解释:关键路径可以理解为项目的核心路径,可以总结出来的流程,或者已有项目中的重点业物流。
我们来举个例子,工程师A开发了一套SDK的服务端,功能包括登录,支付、实名制、积分、充值限制配置等等。我们拿其中的一个重要功能扩展来讲。
A.登录
以下代码是我临时写的,用于举例子。无法运行。请注意。
@Autowired UserService userService; public User login(long userId){ //省略token等等认证 User user = userService.getUser(userId); if (user!=null){ System.out.println("login OK"); return user; }else{ //注册新用户。 try{ user= new User(); //此处省略user的属性赋值 userService.register(user); }catch(Exception e){ System.out.println("login fail"); } //写缓存 userService.saveUserCache(user); //同步到全量数据表 userService.synUser(user); } return user; }
我们来看这段登录代码,其核心功能就是保证登录成功,用户登录,验证凭证和查询用户信息,如果用户存在,则返回用户信息。如果不存在,则创建用户。登录成功和创建成功后,都会更新用户的信息到缓存中,同时同步到全量表中。
//写缓存 userService.saveUserCache(user); //同步到全量数据表 userService.synUser(user);
Code-Review-关键路径法:就是要非关键路径尽量减少对关键路径的影响,对于登录,login票据验证,返回用户信息(创建用户信息)来说,写缓存和同步全量数据表的操作就可以理解为非关键路径。非关键路径要减少对关键路径的影响。
所以,从代码来看,写缓存和同步到全量数据表的功能在有异常的情况下,会直接影响到关键路径。所以,需要正对这俩个非关键路径代码块进行异常处理。
try{ //写缓存 userService.saveuserCache(user);
}catch(Exception e){ log.error("write user cache error:{}",e.getMessage()); }
try{ //同步到全量数据表 userService.synUser(user);
}catch(Exception e){ log.error("write to syn table error:{}",e.getMessage()); }
增加了异常处理后,以上俩个代码块就不会影响到关键路径。可能大家会简单认为这是一个异常处理的问题,但是本质上是一种Code-Review的思路,就是关键路径法的思路。顺着这个思路来,我们能在代码review阶段发现很多问题,并且能及早的修复。
当然,异常处理的代码示例我只是简单的写了个例子,只是用来说明关键路径法的好处。
最后我要补充的内容是,关键路径法应用的场景还有很多,比如项目设计,需求、测试等等各个环境都可以应用,小时候大人常说的举一反三,就是这个道理,一个好的解决方案或者方法,一定是可以应用到多个不同的场合和场景的。
好了,今天就写到这里。后续会陆续补充Code-Review中用到的一些好的方法和思路。下回见,我是百灵。