의존성 주입 에 대한 Wikipedia 페이지 의 단점 섹션에서이를 알려줍니다.
종속성 주입은 서브 시스템 사용자가 해당 서브 시스템의 요구를 제공하도록 요구함으로써 커플 링을 증가시킵니다.
의존성 주입은 클래스가 구체적인 구현 대신 인터페이스를 사용하도록합니다. 그 결과 커플 링 이 줄어 듭니다 .
내가 무엇을 놓치고 있습니까? 의존성 주입은 클래스 간 결합을 어떻게 증가시키고 있습니까?
의존성 주입 에 대한 Wikipedia 페이지 의 단점 섹션에서이를 알려줍니다.
종속성 주입은 서브 시스템 사용자가 해당 서브 시스템의 요구를 제공하도록 요구함으로써 커플 링을 증가시킵니다.
의존성 주입은 클래스가 구체적인 구현 대신 인터페이스를 사용하도록합니다. 그 결과 커플 링 이 줄어 듭니다 .
내가 무엇을 놓치고 있습니까? 의존성 주입은 클래스 간 결합을 어떻게 증가시키고 있습니까?
답변:
그래서, 내가 무엇을 놓치고 있습니까?
종속성 주입은 클래스와 해당 종속성 간의 연결을 줄입니다. 그러나 클래스와 소비자 (소비자가 정보를 작성하기 위해 더 많은 정보가 필요하기 때문에)와 종속성과 소비자 (소비자가 사용할 종속성을 알아야하기 때문에) 사이의 연결을 증가시킵니다.
종종 이것은 좋은 트레이드 오프입니다. 클래스는 인터페이스를 넘어 의존성에 대한 세부 사항을 알지 않아야 하며, 특정 코드 비트를 함께 묶는 것은 애플리케이션의 책임 이어야 합니다.
S
데이터베이스 연결에 의존 하는 서브 시스템 이 있다고 가정하십시오 D
. 의존성 주입이 없으면 사용 방법과 작성 방법을 모두 알아야 하기 때문에 S
와 사이에 비교적 밀접한 결합 이 있습니다. 시스템의 나머지 부분은, 그러나, 사이의 의존성 행복하게 인식 될 수 및 .D
S
D
S
D
의존성 주입과 함께 사이의 커플 링 S
과 D
당신이에서 제거하기 때문에, 패자가된다 S
를 만드는 방법에 대한 지식 D
. S
사용 방법을 알아야합니다. 전체 커플 링의 증가는 이제 시스템의 다른 부분에 대해 알고 있어야 D
하는 방법과 가능한 방법에 대한 것입니다. 이 커플 링의 증가 정도는 의존성이 어떻게 D
주입 되는지에 달려 있습니다 S
.
S
요구에 대한 종속성 D
가능성이 지식을 어떻게 하나를 만들 수 있습니다.S
되는 메소드의 각 호출자는 메소드를 작성하는 방법에 D
대한 종속성 D
및 가능한 지식이 필요합니다 .두 경우 모두 시스템에 어딘가에 스틸 D
을 생성하는 방법과 지식 D
이 필요합니다. 이로 인해 커플 링이 전반적으로 증가합니다.
S
의 팩토리를 공급해야합니다. D
즉, 그 S
용도 D
(또는 적어도 일부 인터페이스) 를 알아야합니다 .
나는 그것이 커플 링을 증가 시킨다는 것에 동의하지 않는다.
종속성 주입이 없으면 하위 시스템과 종속성의 구체적인 구현간에 긴밀한 연결이 있습니다.
종속성 주입을 사용하면 하위 시스템을 종속성 구현에서 분리했습니다.
소비자는 이러한 서브 시스템 사이의 결합 증가 시킨다는 주장 만들기이다 VERY 은 소비자가 현재 단단히 서브 시스템에 의해 요구 된 종속성에 결합되어 있듯이 의심. 그것은 소비자를 종속성에 연결하는 밀접하게 결합 된 코드를 작성한다는 것을 의미합니다. 이상적으로는 모든 코드가 분리되어 있습니다.
생성자 주입 :
의존성 해결은 의존성 주입 컨테이너 또는 팩토리에 의해 처리됩니다. 소비자는 의존성 주입 컨테이너 또는 팩토리에서 서브 시스템의 구체적인 구현을 얻을 수 있습니다.
소비자는 서브 시스템의 생성자가 어떤 모습인지 알 필요가 없습니다. 서브 시스템 종속성에 대한 커플 링이 없습니다.
방법 주입 :
이제 소비자가 컨테이너 또는 팩토리에서 종속성의 구체적인 인스턴스를 가져 와서 메소드 / 생성자를 주입해야한다는 점을 제외하고 생성자 주입과 동일합니다. 다시, 소비자는 의존성의 구체적인 구현과 관련이 없다.
TL; DR 서브 시스템에서 의존성 주입에 대한 최악의 경우는 커플 링이 소비자 코드로 이동한다는 것입니다. 커플 링의 전반적인 증가는 없습니다.
가장 좋은 경우는 모든 시스템이 느슨하게 결합되고 종속성 주입 컨테이너 또는 팩토리를 통해 종속성 주입이 제어되는 것입니다.