이번 주에 의존성 주입에 Typhoon 프레임 워크를 사용하는 방법을 조사했습니다. 객체 구성을 분리하면 단위 테스트 중에 임의의 구성 요소를 모의 객체로 대체하는 데 도움이되며 지금까지 이것만으로도 이점을 얻었습니다.
그러나 수십 개의 헤더 가져 오기가있는 거대한 뷰 컨트롤러 클래스가 있기 전에 수십 개의 헤더 가져 오기가있는 거대한 팩토리 클래스가 있다고 생각합니다. 대규모 공장 수업을 피해야합니까?
답변
의존성 주입은 단순히 한 개체가 다른 종속 개체에 대해 어떻게 알고 있는지 정의하는 데 도움이됩니다. 시스템의 전체적인 복잡성을 줄이는 데 도움이되지는 않습니다. DI 이전에 수십 개의 수입품이 필요한 경우에도 수십 개의 수입품이 필요합니다. 차이점은 이러한 수입품이 더 의미있는 장소 (공장, 건축업자 등)에 있다는 점입니다.
생성자 또는 메소드를 통해 종속성을 제공함으로써 클래스에 여전히 다르지만 여전히 유효한 종속 오브젝트를 제공하고 우려를 제거하여 해당 클래스의 응집력을 높일 수있는 유연성을 스스로에게 허용합니다.
DI (Dependency Injection), IoC (Inversion of Control) 및 DIP (Dependency Inversion Principle)와 유사하고 종종 함께 사용되는 몇 가지 원칙이 있습니다.
이 기사에서
http://martinfowler.com/articles/dipInTheWild.html
DI는 배선에 관한 것이고, IoC는 방향에 관한 것이고, DIP는 형상에 관한 것이다.
답변
의존성 주입은 복잡성을 줄이지 않지만 문제를 분리하고 결합을 줄임으로써 관리 가능성을 높입니다.
그러나 수십 개의 헤더 가져 오기가있는 거대한 뷰 컨트롤러 클래스가 있기 전에 수십 개의 헤더 가져 오기가있는 거대한 팩토리 클래스가 있다고 생각합니다. 대규모 공장 수업을 피해야합니까?
당신은 “엄청난”수업, 기간을 피해야합니다. 뷰 컨트롤러를 더 작고 유지 관리가 쉬운 클래스로 분할한다고 가정 해 봅시다. 이제 그들 모두는 그들의 의존성을 붙잡을 책임이 있습니다. DI는 이러한 종속성 관리를 모든 해당 클래스 에서 종속성 관리 만을 담당 하는 팩토리 / 구성 클래스로 옮길 수 있도록 도와줍니다 ( 단일 책임 원칙 참조). 그리고 원래 뷰 컨트롤러보다 훨씬 덜 “풍선 적”이지만 너무 커지면 항상 응용 프로그램의 다른 부분을 담당하는 더 작은 종속성 관리 클래스로 분할 할 수 있습니다.
답변
평신도의 말로 :
의존성 주입은 복잡성을 덜 해치는 곳으로 복잡성을 이동시킵니다.
@gnat에 대한 편집 : DI는 복잡성을 별도의 클래스로 옮기는 것이 아니라 덜 해를 끼치는 곳으로 옮깁니다.