2013-09-03 1 views
1

이의 내가 호출 방법에 따라 다른 서비스를 호출 할 수있는 서비스가 있다고 가정 해 봅시다 :서비스 : 옵션 종속

class Foobar 
{ 
    public function foo() { 
     return *SERVICE_A*->baz(); 
    } 

    public function bar() { 
     return *SERVICE_B*->qux(); 
    } 
} 

을 이제는 foobar의 foo는() 메서드를 호출 할 때를, 나는 SERVICE_A을해야 Foobar에서 사용할 수 있습니다. SERVICE_A와 SERVICE_B를 Foobar의 의존성으로 정의하고, 생성 단계에서 서비스 컨테이너에 생성을 위임하거나, Foobar의 setServiceA() 또는 setServiceB() 메소드와 같은 setter를 사용하여 외부에서 주입하거나, 서비스 컨테이너를 Foobar를 사용하면 현재 필요한 서비스 만 구성 할 수 있습니다.

그들 중 하나가 호출되지 않습니다 경우에도 SERVICE_A 및 SERVICE_B 모두를 만들 것이기 ​​때문에 첫 번째 옵션이 나에게 적합하지 않는 것 같습니다. 두 번째 옵션은 서비스 인프라를 외부 세계에 노출하기 때문에 분명히 잘못되었습니다. 코드를 테스트하기 어려운 코드를 만드는 전체 서비스 컨테이너에 의존하기 때문에 세 번째 옵션도 좋지 않습니다. 지연 종속 서비스 종속성을위한 방법이 있습니까?

답변