우리는 응용 프로그램의 소스 코드에 꽤 많은 장소가 있습니다. 한 클래스에는 동일한 이름과 다른 매개 변수를 가진 많은 메소드가 있습니다. 이러한 메소드에는 항상 '이전'메소드의 모든 매개 변수와 하나 이상의 매개 변수가 있습니다.
그것은 긴 진화 (레거시 코드)와 이러한 생각 (믿습니다)의 결과입니다.
" A를 수행하는 메소드 M이 있습니다. A + B를 수행해야합니다. 알겠습니다. 저는 M에 새 매개 변수를 추가하고,이를 위해 새 메소드를 작성하고, 코드를 M에서 새 메소드로 이동합니다. 하나 이상의 매개 변수로 A + B를 수행하고 새 매개 변수의 기본값으로 M에서 새 메소드를 호출하십시오. "
다음은 Java와 같은 언어의 예입니다.
class DocumentHome {
(...)
public Document createDocument(String name) {
// just calls another method with default value of its parameter
return createDocument(name, -1);
}
public Document createDocument(String name, int minPagesCount) {
// just calls another method with default value of its parameter
return createDocument(name, minPagesCount, false);
}
public Document createDocument(String name, int minPagesCount, boolean firstPageBlank) {
// just calls another method with default value of its parameter
return createDocument(name, minPagesCount, false, "");
}
public Document createDocument(String name, int minPagesCount, boolean firstPageBlank, String title) {
// here the real work gets done
(...)
}
(...)
}
나는 이것이 잘못되었다고 생각한다. 우리는 이와 같은 새로운 매개 변수를 계속 추가 할 수있을뿐만 아니라 메소드 간의 모든 종속성으로 인해 코드를 확장 / 변경하기가 어렵습니다.
이 작업을 더 잘 수행하는 방법은 다음과 같습니다.
파라미터 객체를 소개합니다 :
class DocumentCreationParams { String name; int minPagesCount; boolean firstPageBlank; String title; (...) } class DokumentHome { public Document createDocument(DocumentCreationParams p) { // here the real work gets done (...) } }
DocumentHome
호출하기 전에 매개 변수를 객체로 설정하십시오.createDocument()
@In DocumentHome dh = null; (...) dh.setName(...); dh.setMinPagesCount(...); dh.setFirstPageBlank(...); Document newDocument = dh.createDocument();
작업을 다른 방법으로 분리하고 필요에 따라 호출하십시오.
@In DocumentHome dh = null; Document newDocument = dh.createDocument(); dh.changeName(newDocument, "name"); dh.addFirstBlankPage(newDocument); dh.changeMinPagesCount(new Document, 10);
내 질문 :
- 설명 된 문제가 실제로 문제입니까?
- 제안 된 솔루션에 대해 어떻게 생각하십니까? (경험에 따라) 어느 것을 선호하십니까?
- 다른 해결책을 생각할 수 있습니까?