重构方法并删除额外的局部变量(删除绑定)

Refactor method and remove extra local variable(remove binding)

提问人:Pavel Petrashov 提问时间:12/21/2021 最后编辑:AmrDeveloperPavel Petrashov 更新时间:4/10/2022 访问量:166

问:

我有这个类:

public class User {
    private String name;
    private int age;
    //getters setters
}

我有一个方法,可以更新用户对象:

public void foo(User user) { 
    boolean needUpdate = false;
    
    if(needUpdateName(user.getName())) {
        user.setName("new name"); 
        needUpdate = true;
    }
    
    if(needUpdateAge(user.getAge())) {
        user.setAge(42);
        needUpdate = true; 
    }
    
    if(needUpdate) {
        userRepository.update(user);
    } 
}

这是一个简单的例子,只是一个例子。如何重构此代码并删除变量?needUpdate

Java 方法 重构

评论

1赞 Andrew Tobilko 12/21/2021
你可以做一个“更新程序”的列表(每个更新程序都返回他们是否做了什么),并将其简化为boolean
0赞 Bohemian 4/10/2022
我认为该变量应该移动到 User 类内部 - 它可以保持状态以知道它是否需要更新到存储库。这就是 Hibernate 的工作方式。也许你应该只使用 Hibernate 而不是重新发明轮子。

答:

0赞 Kai-Sheng Yang 4/10/2022 #1

只需拆分为两种方法Foo

public void updateNameIfNeed(User user) {
    if (needUpdateName(user.getName())) {
       user.setName("new name"); 
       userRepository.update(user);
    }
}

public void updateAgeIfNeed(User user) {
    if (needUpdateAge(user.getAge())) {
        user.setAge(42);
        userRepository.update(user);
    }
}