我有一些相同的代码,只是某些分配序列的顺序略有不同。
很容易将其分解为 type 的方法参数int[]
,它表示顺序。
但是,我发现这不是最清楚的。
另一种选择是将它们分解为 type 的对象AssignmentOrders
。我还可以对对象构造函数中的值进行验证,而我无法对数组进行验证。这将是 Refactoring 书中的“引入参数对象”重构。
我想知道这种特殊的重构是否过度,我应该坚持使用int[]
?
代码:
原件的三个样本:
private static PersonDetails parseLine(String line, String deliminator, int[] orderOfSections)
throws Exception {
String[] sections = line.split(deliminator);
String value1 = sections[0].trim();
String value2 = sections[1].trim();
String value3 = sections[4].trim();
String value4 = sections[2].trim();
String value5 = sections[3].trim();
//........
}
private static PersonDetails parseLine(String line, String deliminator)
throws Exception {
String[] sections = line.split(deliminator);
String value1 = sections[1].trim();
String value2 = sections[0].trim();
String value3 = sections[2].trim();
String value4 = sections[3].trim();
String value5 = sections[4].trim();
//........
}
private static PersonDetails parseLine(String line, String deliminator, int[] orderOfSections)
throws Exception {
String[] sections = line.split(deliminator);
String value1 = sections[0].trim();
String value2 = sections[1].trim();
String value3 = sections[2].trim();
String value4 = sections[4].trim();
String value5 = sections[5].trim();
//........
}
我如何将上述 3 重构为:
private static PersonDetails parseLine(String line, String deliminator, int[] orderOfSections)
throws Exception {
String[] sections = line.split(deliminator);
String value1 = sections[orderOfSections[0]].trim();
String value2 = sections[orderOfSections[1]].trim();
String value3 = sections[orderOfSections[2]].trim();
String value4 = sections[orderOfSections[3]].trim();
String value5 = sections[orderOfSections[4]].trim();
//........
}
我如何在理论上将其重构为参数对象:
private static PersonDetails parseLine(String line, String deliminator, OrderOfSections order)
throws Exception {
String[] sections = line.split(deliminator);
String value1 = sections[order.getValue1Idx].trim();
String value2 = sections[order.getValue2Idx].trim();
String value3 = sections[order.getValue3Idx].trim();
String value4 = sections[order.getValue4Idx].trim();
String value5 = sections[order.getValue5Idx].trim();
//........
}
我想做的是创建一个特定的类而不是使用int[]
......但想知道这是否会有点矫枉过正。
好处是它更具可读性。而不是orderOfSections[0]
,它可能是orderOfSections.value1SectionIdx
......我还可以将一些验证代码放入类中。
我相信这就是 Martin Fowler 所说的引入参数对象。
编辑:
另一种选择是使用字典。比新课程更轻,但更具描述性......然后我可以使用类似的东西orderOfSections["value1"]