2011-09-27 4 views
6

IoC 컨테이너를 사용하면 과도하게 설계된 솔루션을 만들 수 있다고 생각하기 시작합니다. (적어도 불필요한 다양한 기능을 사용하려고합니다.)IoC 컨테이너 사용의 안티 패턴. IoC 컨테이너가 너무 복잡하고 "공상적인"방식으로 사용되는 이유는 무엇입니까?

그것은 하나의 ..

내 짧은 경험

가 일부 인프라 싱글을 해결하고 함께 시작 시작시 응용 프로그램 당 한 번에 해결 방법을 문의하기 위해 절대적으로 충분하다 말할 커뮤니티 내 "IOC의"반 패턴 목록을 동기화 할 수있는 시간 그것들은 새로운 "더 작은 수명 곡물 공장"을 생산할 수있는 "일시적인 물건의 공장"이다. 심지어 공장에 10 개의 코드 행을 추가하여 해당 팩토리를 안전하게 스레드로 만들 수도 있습니다 (예 : 스레드 당 하나의 인스턴스 생성). "그 라이브러리는 IoC 도구와의 통합"보다 훨씬 간단합니다. 차단? 나만의 래퍼 만들기 ... 평생 매니저/의존 전략/부모 컨테이너? 부트 스트 래퍼에서 Resolve를 한 번만 호출하면 그에 대해 생각하지 않을 것입니다.

개발자가 다른 응용 프로그램 계층에서 여러 번 (컨테이너를 전달하거나 대리자를 컨테이너에 전달하여) 여러 번 해결을 호출하는 이유를 이해할 수있게 도와 주시겠습니까? 나는 정말로 내가 놓친다 고 걱정한다. 아마도 나를 이해할 수

+2

좋은 점. 이 말을 상세히 표시 할 수 있습니까? –

답변

0

다른 안티 패턴은 용기 "깊은"다음 실제 bootsrapper의 초기화를 추진하고있다. WCF 응용 프로그램의 예를 Unity and WCF recommendations

부트 스트 래퍼를 들어

는 단지 생성자에 컨테이너 초기화를 넣어, 서비스 생성자입니다. 나는 "IoC container free"부트 스트 래퍼를 갖고 싶다면 - "IoC container free"서비스 계약 구현이 필요하다면, 그것은 터무니 없다 - 당신이 "IoC container free"부트 스트 래퍼를 갖고 싶다면, wcf sevice behaiviors와 custome sevice host factory 프로그래밍을 위해 추천 할 이유를 이해하지 못한다. 두 번째 "IoC container free"서비스 계약 구현 만 작성하면됩니다.

1

는 분명히 뭔가 잘못

This을 읽어보십시오. 새로운 도서관은 복잡한 코드를 추가해서는 안됩니다.

1

어떤 종류의 IoC는 반 패턴이거나 일부 경우 일 수 있습니다. 예 : service locator antipattern. 그러나 응용 프로그램의 시작 부분에 생성자 주입을 사용하는 경우에만 - 이 아닌 패턴으로 이어지지 않아야합니다.

클래스에서 DI 컨테이너 인터페이스를 주입하는 것은 생성자 주입을 잘못 사용하는 것입니다. DI가 클래스의 비즈니스 로직의 일부가 아닌 경우 DI 컨테이너를 모르거나 의존해서는 안되며 IKitchen에 의존해야합니다. 의존성 주입 컨테이너와 함께 일하는 일종의 도우미 나 서비스에 DI 컨테이너를 주입하는 것은 괜찮습니다. 왜냐하면 목적이 DI 컨테이너와 함께 작업하기 때문입니다. 링크의 예는 IoC의 오용입니다. IoC가 일반적으로 안티 패턴이라는 것을 의미하지는 않습니다.

올바른 질문은 "생성자 주입이 안티 패턴이 될 수 있습니까?"라고 생각합니다. 지금까지 나는 그런 상황에 직면 할 때까지 어떠한 상황에도 직면 한 적이 없거나 그것이 어디에서 어떤 예를 본 적이 없기 때문에 "아니오"라고 말할 것입니다.나는 간단한 의존성 주입을 통해 단지 overcomplication라고 생각하기 때문에이 IoC 컨테이너를 사용하는 방법을 나에게 명확하지 않았다

2

, 나는 그것을 사용을 중지하기로 결정했다.

심지어없이 IOC는이를 통해 주입 경우에 빠지게 할 수 있지만 그것은 사실이다. 얼마전에 나는 마음을 열었던 기사의 저자로부터 몇 개의 게시물을 읽었습니다.

이미 인젝터 알고

은 컨텍스트 루트 내에서 사용되어야한다. 그러나과 주입을 피하기 위해 주입 된 공장에 대한 규칙을 제외하기로했습니다. 내 프레임 워크에서

는, 공장 (만 공장) 인젝터 컨테이너를 사용할 수 있습니다. 팩토리는 컨텍스트 루트의 컨테이너에 바인드되므로 주입 할 수 있습니다. 팩토리는 유효한 종속성을 가지며 인젝터 컨테이너를 사용하여 종속성 삽입을 용이하게하는 다른 객체 안에 새로운 객체를 만드는 데 사용됩니다.

+0

예! 나는 너와 여기서 완전히 동의한다. 팩토리가 컨테이너를 사용할 수 있도록 허용하는 것은 괜찮습니까? 객체를 수동으로 "새로 만들기"? 저는 사람들이 이러한 개념을 _ 생산적 도구로 사용하기보다는 개념의 배경에 너무 많이 매달려 있다고 생각합니다. –

관련 문제