2022.06.01熊哥代码Review学习笔记
阿昌 Java小菜鸡
# 2022.06.01熊哥代码Review学习笔记

一、分块编程思想

  • 说明

    分块编程思维,将代码分块化

  • 优点

    • 代码具有封装性
    • 思路更为明确,增强可读性
    • 编译Arthas调试工具调试watch,观察入参/出参/报错等信息调试
  • 实例

    以下只是一个简单的例子,无比较真

    • 原来
    1
    2
    3
    4
    5
    6
    7
    8
    public void updateUser(){
    User user = new User();
    user.setId(1);
    user.setName("阿昌");
    user.setAge(23);
    Boolean flag = userService.updateByUser(user);
    }

    • 优化思路

    将user的参数装填流程封装成一个方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void updateUser(){
    User user = buildUser();
    Boolean flag = userService.updateByUser(user);
    }

    User buildUser(){
    User user = new User();
    user.setId(1);
    user.setName("阿昌");
    user.setAge(23);
    return user;
    }

二、三角形代码

  • 说明

    何为三角形?是一种戏称

    实际上是指你是if-else战士,没有说不好,单指代码如果有大量的if-else就会出现可读性下降

  • 实例

1
2
3
4
5
6
7
8
9
public void test(User user){
if("阿昌".equals(user.getName())){
if(23 == user.getAge()){
if(1 == user.getId()){
System.out.println("阿昌来也");
}
}
}
}
  • 优化思路

    这里给予一个优化的思路,通过Assert工具类将if-else的括号天堂改写为一行代码,或直接用if+reuturn的方式等..

    1
    2
    //Assert
    Assert.isTrue();
    1
    2
    3
    4
    5
    //if+reuturn
    public void test(User user){
    if(!"阿昌".equals(user.getName())) reutrn;
    .....
    }

三、确保多线程情况下List的的有序问题

  • 说明

    当多线程情况下,请保证遍历逻辑中,List是有序的。

    这里列举一个简单的案例,无比较真。假设List中包含1、2、3、4、5个元素,且无序的状态。

    在极端高并发场景下,当线程A遍历List先获取到了2进行业务逻辑,结束后是打算获取3进行操作;线程B遍历List先获取到3进行业务逻辑操作,结束后是打算获取2进行操作。

    这里的情况将会出现死锁问题


四、Git冲突代码问题

  • 说明

    当合并代码时,以Master为主,合并完Master后,开发分支的代码以拓展功能的维度进行合并


五、CSCD设计架构

  • 说明

    这个名字是我零时以层头名第一个字母合在一起组成的,具体的内容我忘记了。

    以Controller/Service/Conponent/Dal,4层组成。

    • Controller

      对外暴露路径,对入参校验、模型转换等

    • Service

      具体的业务大模块

    • Conponent

      某个业务大模块下的小组成

    • Dal

      只关注面向数据库层进行数据操作

 请作者喝咖啡