나는 당신이 이전에했던 방식을 고수한다고 말할 것입니다. 예제의 매개 변수 수는 많지 않지만 대안은 훨씬 더 끔찍합니다.
지도-당신이 언급 한 효율성이 있지만 여기서 더 큰 문제는 다음과 같습니다.
- 호출자는
다른 것을 참조하지 않고 무엇을 보내야할지 모릅니다 ... 정확히 어떤 키와
값이 사용 되는지 명시하는 javadocs가 있습니까? 그렇게한다면 (훌륭한), 매개 변수가 많은 것도 문제가되지 않습니다.
- 다른 인수 유형을 받아들이는 것은 매우 어려워집니다. 입력 매개 변수를 단일 유형으로 제한하거나 Map <String, Object>를 사용하고 모든 값을 캐스트 할 수 있습니다. 두 옵션 모두 대부분 끔찍합니다.
래퍼 개체-처음에 래퍼 개체를 채워야하기 때문에 문제를 이동합니다. 메서드에 직접 연결하는 대신 매개 변수 개체의 생성자에 대한 것입니다. 문제를 이동하는 것이 적절한 지 여부를 결정하는 것은 해당 개체의 재사용에 달려 있습니다. 예를 들면 :
사용하지 않을 것 : 첫 번째 호출에서 한 번만 사용되므로 한 줄을 처리하기위한 많은 추가 코드 ...?
{
AnObject h = obj.callMyMethod(a, b, c, d, e, f, g);
SomeObject i = obj2.callAnotherMethod(a, b, c, h);
FinalResult j = obj3.callAFinalMethod(c, e, f, h, i);
}
그것을 사용할 수 있습니다 : 여기, 조금 더 할 수 있습니다. 첫째, 3 개의 메서드 호출에 대한 매개 변수를 인수 할 수 있습니다. 그것은 또한 2 개의 다른 라인을 그 자체로 수행 할 수 있습니다 ... 그래서 그것은 어떤 의미에서 상태 변수가됩니다 ...
{
AnObject h = obj.callMyMethod(a, b, c, d, e, f, g);
e = h.resultOfSomeTransformation();
SomeObject i = obj2.callAnotherMethod(a, b, c, d, e, f, g);
f = i.somethingElse();
FinalResult j = obj3.callAFinalMethod(a, b, c, d, e, f, g, h, i);
}
- 빌더 패턴-이것은 내 관점에서 안티 패턴입니다. 가장 바람직한 오류 처리 메커니즘은 나중에가 아니라 더 일찍 감지하는 것입니다. 그러나 빌더 패턴을 사용하면 필수 매개 변수가 누락 된 (프로그래머가이를 포함하지 않았 음) 호출이 컴파일 시간에서 런타임으로 이동됩니다. 물론 프로그래머가 의도적으로 슬롯에 널 (null) 등을 넣는 경우 런타임이 될 수 있지만 호출하는 메서드의 매개 변수 이름을 보지 않는 프로그래머를 처리하는 데 훨씬 더 큰 이점이 있습니다. 많은 수의 선택적 매개 변수를 다룰 때만 적절하다고 생각하며 , 그럼에도 불구하고 이점은 기껏해야 미미합니다. 나는 빌더 "패턴"에 매우 반대합니다.
사람들이 고려해야 할 또 다른 사항은이 모든 것에서 IDE의 역할입니다. 메서드에 매개 변수가 있으면 IDE가 대부분의 코드를 생성하고 제공 / 설정해야하는 항목을 알려주는 빨간색 선이 표시됩니다. 옵션 3을 사용하면 ... 완전히 손실됩니다. 이제 제대로하는 것은 프로그래머의 몫이며, 코딩과 컴파일 시간에는 단서가 없습니다. 프로그래머는이를 확인하기 위해 테스트해야합니다.
또한 옵션 2와 3은 불필요하게 광범위하게 확산 될 경우 생성되는 많은 양의 중복 코드로 인해 유지 관리 측면에서 장기적으로 부정적인 영향을 미칩니다. 코드가 많을수록 유지 관리 할 수있는 코드가 많을수록 유지 관리하는 데 더 많은 시간과 비용이 소비됩니다.