我很难重构这段代码,但没有成功。请告诉我如何去做。我在那里待了几个小时试图寻找解决方案。我已经阅读了一些关于清洁代码的摘录,但作为初学者我真的觉得很难重构。对不起,这是我第一次诚实的尝试,但我无法弄清楚如何制作大小~4或小的功能。
public boolean[] validateTrueFalse(String[] checkBoxValues) {
boolean[] answer = new boolean[checkBoxValues.length];
for (int i = 0; i < checkBoxValues.length; i++) {
// values are like 1_true
String[] values = checkBoxValues[i].split("_"); // split each value
// from my array
int configId = Integer.parseInt(values[0]);
boolean isAns = Boolean.parseBoolean(values[1]);
for (TrueFalseConfigurationModel tm : dt.getTfModelList()) {
if (tm.getConfiguration_id() == configId) {
if (tm.isAnswer() == isAns) { // are values from both true
answer[i] = true;
} else {
answer[i] = false;
}
}
}
}
return answer;
}
答案 0 :(得分:1)
请记住,短片并不一定意味着更好。很多时候,更长的方法可以更具可读性,并且将来更容易理解和维护。你有时需要在你第一次写代码后的一年或两年内查看你的代码,如果在你做得太短以至于你无法理解它之后你就无法理解它。了解你在那种方法中的意图。当然,另一个极端也是要避免的,而且太长的方法不是模块化的,如果你只想改变它的一个特定部分,就很难理解。
在我看来,你写的方法长度很长,不需要缩短。
但只是回答你的问题,你总是可以通过将方法划分为更多方法来缩短方法。例如在你的情况下:
public boolean[] validateTrueFalse(String[] checkBoxValues) {
boolean[] answer = new boolean[checkBoxValues.length];
for (int i = 0; i < checkBoxValues.length; i++) {
answer[i] = GetAnswer(checkBoxValues[i]);
}
return answer;
}
public bool GetAnswer(string aCheckBoxValue)
{
String[] values = aCheckBoxValue.split("_");
int configId = Integer.parseInt(values[0]);
boolean isAns = Boolean.parseBoolean(values[1]);
for (TrueFalseConfigurationModel tm : dt.getTfModelList())
{
if (tm.getConfiguration_id() == configId)
{
return tm.isAnswer() == isAns;
}
}
return false;
}
注意我如何将方法中的一个大动作划分为创建较短方法的较小动作。然后,您可以继续以这种方式将GetAnswer
方法本身划分为2种方法,如果您能找到一种划分它的逻辑方法。
答案 1 :(得分:0)
你可以减少
if (tm.isAnswer() == isAns) { // are values from both true
answer[i] = true;
} else {
answer[i] = false;
}
通过
answer[i] = tm.isAnswer() == isAns;