从方法中减少多个if条件以满足SonarQube的要求

时间:2016-12-22 06:33:01

标签: java

$(document)ready

方法变得更大&考虑到臭臭的代码,我需要减少不作为sonarQube的行。 我不能使用三元运算符。有人能给出同样最好的例子吗? 我尝试了太多的东西,但如果条件是必要的话,那就是全部。

3 个答案:

答案 0 :(得分:2)

正如有些人所说 - 似乎课程FilterDateParams需要重新架构。由于您正在查看某些String键及其值,因此使用Map可能是一个好主意,这样您可以迭代条目,检查空条件并分别应用所请求的逻辑。以下是一种方法:

class FilterDateParams {

    private Map<String, String> map = new HashMap<>();
    private FilterDateParams() {}

    public static FilterDateParams build(String dateCreated_gt,
                                          String dateCreated_gte,
                                          String dateCreated_lt,
                                          String dateCreated_lte) {
                                          // and etc...

        FilterDateParams fdp = new FilterDateParams();
        fdp.map.put("dateCreated_gt", dateCreated_gt);
        fdp.map.put("dateCreated_gte", dateCreated_gte);
        fdp.map.put("dateCreated_lt", dateCreated_lt);
        fdp.map.put("dateCreated_lt", dateCreated_lt);
        fdp.map.put("dateCreated_lte", dateCreated_lte);
        // and etc

        return fdp;
    }

    public void buildParams(UriBuilder builder) {
        for (Map.Entry<String, String> entry : map.entrySet()) {
            if (null != entry.getValue()) {
                builder.queryParam(entry.getKey(), new Object[] {entry.getValue()});
            }
        }            
    }
}

请注意,当我们想要创建一个我们用所需参数调用它的实例时,静态工厂用于创建类的实例,例如:

FilterDateParams filterDateParams = FilterDateParams.build("a", "b", "c", "d");

以后再构建query-params:

filterDateParams.buildParams(builder);

由于我们必须至少设置一次参数,我们无法避免执行以下操作:

    fdp.map.put("dateCreated_gt", dateCreated_gt);
    fdp.map.put("dateCreated_gte", dateCreated_gte);
    ...

它相当于使用setter或构造函数来设置这些字段中的每一个,这意味着实际上 real 没有重复!

此外,一旦设置完所有,您可以使用map-entries迭代键/值,而无需一次又一次地执行相同的重复(例如在Turo的答案中)。

答案 1 :(得分:1)

制定方法:

buildParamater(builder,"dateCreated_gt",filterDateParams.getDateCreated_gt());
buildParamater(builder,"dateCreated_gte",filterDateParams.getDateCreated_gte());
...

您将只有一个非null-Check方法。例如:

private void buildParamater(UriBuilder builder, String key, Date val) {
     if (null != val) {
            builder.queryParam(key, new Object[] { val });
     }
}

答案 2 :(得分:0)

通常这样的代码会提示架构问题。

从我的观点来看,最好重构FilterDateParams类以提供方法getStartDate(Identifier identifier)getEndDate(Identifier identifier)并使用可以迭代的枚举Identifier结束了。

但为此,我需要更多代码才能看到这个类实际上做了什么。