나는 그것을 "배달 소년"이라고 부른다. 몇 가지 변종을 보았습니다. 그러나 문제는 클래스가 공동 작업자에게 전달하고 종속성 자체를 사용하지 않는 유일한 목적에 종속된다는 것입니다.이 코드의 냄새에 대한 공통 이름이 있습니까?
(그것이 내가 대부분 알고 있어요 무엇 때문에 PHP를 사용하고 있지만, 이것은 무신론자 언어)
class Dependency{}
class B {
public function setDependency(Dependency $dependency) {
//...
}
}
class A {
private $b;
private $dependency;
public function __construct(Dependency $dependency, B $b) {
$this->dependency = $dependency;
$this->b = $b;
}
public function foo() {
$this->b->setDependency($this->dependency);
}
}
아마 내가,이 목적을 위해 상속을 남용 데 야생에서 볼 수있는 가장 일반적인 변종 부모 클래스가 실제로 의존성 자체를 사용하지 않아도 하위 클래스가 종속성에 액세스 할 수 있도록 존재하는 부모 클래스의 속성.
나는 코드에서 이것이 내가 원하는 것보다 훨씬 더 많이 본다. 그리고 그것은 나를 매우 행복하게하지 않는다! 나는 사람들에게 왜 독서 자료를 링크 시켜서 나쁜 생각인지에 대해 설명 할 수있는 이름이 있는지 궁금해했습니다. 그것이 그대로 서 무엇을 검색해야할지 모르겠습니다!
당신은'ServiceLocator'은이다 쓰고있는"더 나은'Singleton' (나는 책 "Refactoring for software design smells에서 냄새 용어 (예 : 브로큰 계층 구조)를 빌려) " * object가 아닌 * .OP의 사용은 실제 객체에 대한 스트레스만큼이나, ServiceLocator가 대신 사용될 수있는 방법을 보지 못합니다. –
@MiserableVariable - 대부분의 경우, 특정 예를 들어, 의존성 삽입 프레임 워크에는 일반적으로 기존 서비스를 사용할지 아니면 새 서비스를 사용할지 풀링 된 서비스를 사용할지 등 서비스 로케이터가 확실히 동일하게 수행 할 수있는 방법이 있습니다. 여전히 DI와 SL만이 유일한 해결책은 아닙니다 이 문제에, 그러나 그들은 꽤 일반적입니다. –
우리는 아마 두 differe에 대해 이야기하고 있습니다. 특정 인스턴스가 필요하지 않은 많은 경우를 생각한다면 문제가 될 수 있습니다. 나에게 여기에 의존하는 것은 객체 레벨이 아니라 유형 레벨에있다. –