从类似方法中删除冗余

Remove redundancy from similar methods

我有典型的 'clean code' 自然问题。我有两种方法。他们很相似

public void setValue(String arg1, String arg2){
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else

    doSomething(arg2);
}

public void setValue(String arg1){
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else

    doSomething();
}

我正在尝试找到解决方案,如何消除冗余并将两种相似的方法转化为不那么重复的方法。

我考虑过删除第二种方法并检查 arg2 是否为 null,但我尽量不使用 null 作为我的问题的解决方案,尤其是我不认为调用方法 setValue("FirstArgument" , "") 是个好习惯。

public void setValue(String arg1, String arg2){
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else

    if(arg2 != null)
        doSomething(arg2);
    else
        doSomething();
}

我也考虑过'Optional'的说法。你怎么看待这件事?我尽量使我的代码尽可能干净,因此重构是我工作结束时的典型任务。

有几种方法可以解决这个问题。正如您提到的 null 方式的检查,但这里有一些其他方式。

从另一个 (alt 1) 使用较少的参数调用方法:

public void setValue(String arg1) {
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else

    doSomething();
}

public void setValue(String arg1, String arg2) {
    setValue(arg1);
    doSomething(arg2);
}

(请注意,这将调用 doSomething 两次。这可能不适合您。)

从另一个 (alt 2) 使用较少的参数调用方法:

public void setValue(String arg1) {
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else
}

public void setValue(String arg1, String arg2) {
    setValue(arg1);
    doSomething(arg2);
}

(如果doSomething()(不带参数)实际上并没有做太多。)

创建从两个 public 方法调用的第三个 private 方法。此方法将包含两种 public 方法通用的代码:

(方法不能调用setValue(String),那样会和public方法冲突。起个好名字,描述它的作用。)

private void setValuePrivate(String arg1) {
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else
}

public void setValue(String arg1) {
    setValuePrivate(arg1);
    doSomething();
}

public void setValue(String arg1, String arg2) {
    setValuePrivate(arg1);
    doSomething(arg2);
}

可能还有其他我没有提到的方法。