특정 순서의 지정이 약간 다른 순서로 발생한다는 것을 제외하고는 동일한 코드가 있습니다.리팩토링에 대한 도움말 : 매개 변수 객체 소개?
주문을 나타내는 int[]
유형의 메소드 매개 변수로 쉽게 분해 할 수 있습니다.
그러나 가장 명확하지는 않습니다.
또 다른 옵션은 유형을 AssignmentOrders
의 개체로 분해하는 것입니다. 배열을 사용하여 수행 할 수 없었던 객체 생성자의 값에 대한 유효성 검사를 수행 할 수도 있습니다. 이것은 책에서 "매개 변수 개체 소개"리팩토링 리 팩터링 것입니다.
이 특정 리팩토링이 잔인한 것이라면 궁금합니다. int[]
을 고수해야합니까?
코드 : 원본의
3 개의 시료 :
나는 이것으로 3 위를 리팩토링 한 방법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();
//........
}
: 나는 이론적 매개 변수로 리팩토링 수있는 방법
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가 Introducing a Parameter Object라고 생각합니다.
편집 :
또 다른 옵션은 사전을 사용하는 것입니다. 새로운 클래스보다 가벼우면서도 더 설명하기 ... 그렇다면 orderOfSections["value1"]
리팩터링하려는 코드를 게시해야합니다. 그렇지 않으면 도움을 드릴 수 없습니다. –
Ok ok ok 나는 이미 그것을 연구 중이다! –
http://refactormycode.com/에서 시도하는 것이 좋습니다. – Noldorin