代码review发现的难以阅读的代码
一、前言
现在还有人写运行有空指针的代码吗?今天review了一个组员写的程序,一看就是头大。现在复盘分析一下。
代码片段如下:
List<MSMallDTO> msMallDTOS = BeanUtil.copyToList(mSubMallDTOList, MSMallDTO.class);
List<MSMallDTO> mallDTOS = msMallDTOS.stream().map(msMallDTO -> {
List<MSubMall> mSubMallList = getSMallByGroupName(msMallDTO.getGroupName());
if (mSubMallList != null && mSubMallList.size() > 0){
List<MsubMallVo> mallVoList = mSubMallList.stream().map(mSubMall -> {
MsubMallVo mallVo = new MsubMallVo();
BeanUtil.copyProperties(mSubMall, mallVo);
if (relIds != null && relIds.size() > 0){
if (relIds.contains(mSubMall.getId())) {
mallVo.setCollect(true);
}
}
return mallVo;
}).sorted(Comparator.comparing(MsubMallVo::getAppSort))
.collect(Collectors.toList());
msMallDTO.setAppList(mallVoList);
}
return msMallDTO;
}).sorted(Comparator.comparing(MSMallDTO::getSort)).collect(Collectors.toList());
redisUtils.set(RedisKeys.getSubMallByUserId(userId,EnumType.CollectionType.SUB_MALL.getValue()),
JSON.toJSONString(mallDTOS),
RedisConstants.EXPIRE_TIME);
return mallDTOS;
二、代码分析
第一步: List
将 mSubMallDTOList复制到MSMallDTO中 返回对象msMallDTOS
第二步:中间那一堆匿名函数实在难以读懂,先一行行看、
List
根据groupName查询mSubMallList列表
然后是判断 mSubMallList 是否为空 if (mSubMallList != null && mSubMallList.size() > 0)
感觉这里有点画蛇添足 mSubMallList != null && mSubMallList.size() > 0
直接用 null != mSubMallList不就行了吗?
第三步,接下来又是一个匿名函数,看着头大
List<MsubMallVo> mallVoList = mSubMallList.stream().map(mSubMall -> {
MsubMallVo mallVo = new MsubMallVo();
BeanUtil.copyProperties(mSubMall, mallVo);
mallVo.setCollect(false);
return mallVo;
}).sorted(Comparator.comparing(MsubMallVo::getAppSort))
.collect(Collectors.toList());
msMallDTO.setAppList(mallVoList);
声明了一个对象
MsubMallVo mallVo = new MsubMallVo();
将mSubMall复制到mallVo,这感觉真的是脱裤子放屁
BeanUtil.copyProperties(mSubMall, mallVo);
设置一下 mallVo属性
mallVo.setCollect(false);
返回mallVo
return mallVo;
然后这段东西是什么?
.sorted(Comparator.comparing(MsubMallVo::getAppSort))
.collect(Collectors.toList());
msMallDTO.setAppList(mallVoList);
艰涩难懂
这个东西又是什么
msMallDTOS.stream().map
两个匿名函数进行嵌套,实在难以阅读。
三、代码总结
1.嵌套太多的代码,后期修改比较难解构
2.阅读很艰涩
3.潜在BUG难以测试
四、代码书写原则
1、代码尽量简短
2、代码结构清晰
3、避免嵌套
4、一个函数应该只做一件事
还没有评论,来说两句吧...