13

전략 패턴은 종속성 주입과 어떻게 다릅니 까? 즉, 아래전략 패턴 대 종속성 주입

는 전략 패턴으로 할 수있는 것입니다 : 동일한 작업을 수행 할 수 있습니다 DI와

class Foo{ 
    private readonly ISortAlgo _sortAlgo; 

    public Foo(ISortAlgo sortAlgo) 
    { 
    _sortAlgo = sortAlgo; 
    } 

    public void Sort() 
    { 
    _sortAlgo.sort(); 
    } 

} 

은, 본질적으로 생성자, 세터, 인터페이스 등의 주사를 할 수 있습니다. 그것은 전략 패턴과 같은 효과를 줄 것입니다. DI가 느슨한 커플 링, 테스트 가능성, 배선 등과 같은 다른 원칙으로도 설정되어 있다는 것을 알고 있습니다. 구현 측면에서 보면 많은 차이가 없습니다.

전략 패턴과 DI의 차이점은 무엇입니까?

+0

현재 답변이 특히 만족스럽지 않습니다. 더 나은 답변은 런타임에 변수 동작이 주입되는 차이점에 실제적으로 초점을 맞 춥니 다. – Mario

답변

14

먼저 의존성 주입는 주입 방법으로뿐만 아니라, 생성자 주입 아니라 속성, 방법 주입및 주변 문맥있다. 클라이언트가 자신의 필요에 맞는 특별한 하나를 선택할 수 있도록

둘째, stategy행동을 정의합니다. 종속성 주입은 외부 종속성을 추상화합니다.

+1

+1. 행동 *에 대해 언급하기. –

+1

+1 좋은 요약. 나는 약간의 혼동이 두 DP가 같은 메커니즘을 사용하지만 다른 범위와 의도를 가지고 있다는 사실에 기인한다고 생각한다. –

12

Strategy pattern은 런타임시 객체의 비헤이비어 (즉 알고리즘)를 선택할 수 있습니다. 여기에서 Dependency injection은 하드 코딩 된 종속성을 제거 할 수 있습니다.

따라서 경쟁자가 아닙니다. 그들의 구현은 유사 할 수 있지만, 그들의 목표는 다르다.

+1

"이 메소드로 전달되었지만 DI가 아닙니다." 수정 : DI는 여러 형태로 제공됩니다. 생성자는 가장 보편적 인 형태이며 (종종 가장 좋은 옵션입니다), 메소드 삽입은 또한 의존성 삽입 (Dependency Injection)의 한 형태입니다. – Steven

+0

만약 당신이 어떤 행동 (내가 마음에두고있는 경우)을 수행하고 클래스를 초기화하지 않기 위해 메소드에 전달 되었다면 DI로 간주할까요? –

+0

종속성이 메소드에 삽입되므로 예, 종속성 삽입의 한 형태입니다. 그러나 메소드 삽입은 대개 의존성을 주입하는 매우 취약한 방법입니다. 종속성은 계약의 일부 여야하기 때문에 메소드에서 메소드로 메소드에서 메소드로 종속성을 전달하는 것이 번거로울 수 있습니다. – Steven

6

전략을 사용하면 개체의 동작을 변경할 수 있습니다. DI는 추상화에 의존 할 수있는 디자인 패턴입니다.

4

종속성 삽입은 테스트 및 시스템 확장성에 도움이되는 구성 양식 논리를 분할하는 데 도움이되는 패턴입니다. 다른 패턴이 적합한 장소에서도 사용할 수 있습니다. 하나씩 일어나는 것.

전략 패턴은 다른 문제를 해결합니다. 런타임에서 다형성을 통해 OOP에서 알고리즘을 선택할 수 있습니다.

확실히, 그들은 함께 일할 수 있습니다.