$(document)ready
方法变得更大&考虑到臭臭的代码,我需要减少不作为sonarQube的行。 我不能使用三元运算符。有人能给出同样最好的例子吗? 我尝试了太多的东西,但如果条件是必要的话,那就是全部。
答案 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
结束了。
但为此,我需要更多代码才能看到这个类实际上做了什么。