내가 작성한 일부 코드를 탐색하면서 다음과 같은 구성을 보았습니다. 언뜻보기에 충분히 깨끗해 보입니다. 그렇습니다. 실제 코드 getLocation()
에서이 메서드는 좀 더 구체적인 이름을 가지고 있는데,이 이름은 정확히 어떤 위치에 도달하는지 더 잘 설명합니다.
service.setLocation(this.configuration.getLocation().toString());
이 경우 service
알려진 형식의 인스턴스 변수이며 메서드 내에서 선언됩니다. this.configuration
클래스 생성자에 전달되어 제공되며 특정 인터페이스를 구현하는 클래스의 인스턴스입니다 (공개 getLocation()
메서드 를 요구함 ). 따라서 표현식의 리턴 유형 this.configuration.getLocation()
이 알려져 있습니다. 특히이 경우, A는 java.net.URL
반면 service.setLocation()
원한다 String
. 두 가지 유형의 문자열과 URL 직접 호환되지 않기 때문에, 어떤 변환의 종류는 둥근 구멍에 스퀘어 페그에 맞게 필요합니다.
그러나 , 인용으로 데메테르의 법칙에 따른 면도 코드 하는 방법 F 급에서 C는 단지 메소드를 호출한다 C 에 의해 생성되거나 인수로서 전달 된 객체 F , 그리고 인스턴스 변수 유지 오브젝트 C . 그 이상은 ( toString()
메소드 호출의 결과로 생성 된 임시 객체를 고려하지 않는 한 위의 특정 경우 의 최종 결과입니다.이 경우 전체 법률이 무례한 것으로 보입니다) 허용되지 않습니다.
나열된 제약 조건을 감안할 때 위와 같은 호출을 권장하지 않거나 허용하지 않는 이유가 있습니까? 아니면 너무 지나치게 질긴 것입니까?
객체 에 의해 URLToString()
호출 toString()
된 메소드 URL
(예 :에 의해 반환 된 메소드 getLocation()
)를 매개 변수로 전달하고 결과를 반환 하는 메소드를 구현하려는 경우 호출 을 래핑하여 getLocation()
정확히 동일한 결과를 얻을 수 있습니다. 효과적으로, 나는 전환을 한 단계 바깥쪽으로 옮기려고합니다. 어떻게 든 받아 들일 수 있습니까? (이 보인다 않는 모든 조금 주위에 이동 것들이기 때문에 그것이 어떤 차이 어느 쪽이든을하지 않도록, 직관적, 나에게. 그러나, 데메테르의 법칙의 문자로가는 인용, 그것은 내가 때문에 허용 될 수 그런 다음 매개 변수에서 직접 함수로 작동합니다.)
이것이 toString()
표준 유형을 호출 하는 것보다 약간 더 이국적인 것에 관한 것이면 어떤 차이가 있습니까?
대답 할 때 service
변수가 있는 유형의 동작 또는 API를 변경하는 것은 실용적이지 않습니다. 또한 논쟁의 여지가 있기 때문에 반환 유형을 변경하는 getLocation()
것도 비현실적 이라고 가정 해 봅시다 .