문제

비 DI 시스템을 프로그래밍 할 때 저를 붙잡는 은유는 "장난감을 가지고 노는 사람"입니다. 사람은 대상이고 사람의 장난감은 대상이 만드는 모든 것입니다. 장난감은 특정 상태에 도달 할 때 이벤트를 파견 할 수 있지만 사용하는 사람에 대해서는 아무것도 모릅니다. 그들은 인터페이스를 구성하는 제어 스위치가있는 작은 블랙 박스입니다. 사람은 장난감의 이벤트를 듣고 인터페이스를 조작하여 응답 할 수 있습니다. 그 사람은 장난감으로 원하는 모든 것을 할 수 있지만, 부러 질 수 있기 때문에 내부와 함께 가면서는 안됩니다.

내 은유를 뒤흔들 었다는 혼란은 장난감을 소유자, 그들을 사용하는 사람을 아는 의식적인 존재로 바꾸는 것입니다. 장난감은이 사람을 조작 할 수 있지만, 사람은 자신이 어떻게 일하는지에 대해 아무것도 모르고 신경 쓰지 않습니다. 그 사람은 단지 장난감을 소유하고 장난감이 장난감의 만족도로 그를 조작하기를 기대합니다.

wtf ?? 끔찍하게 들립니다 !!
그들이 DI 시스템의 작동 방식을 생각하기 위해 사용했던 좋은 정신적 은유는 무엇입니까?

도움이 되었습니까?

해결책

솔리드 동기 부여 이미지 좋은 소스입니다.

metaphor of the dependency injection principle

다른 팁

신사와 그의 집사를 생각하십시오. Butler (Di Framework)는 신사에게 요구에 따라 필요한 모든 서비스 (외부 의존성)에게 제공합니다 (및 일부는 "초기화시"초기화 ":-)); 신사 (귀하의 클래스)는 단지 서비스를 소비하고 자신의 요구 사항을 충족하는 한 (특정 인터페이스 구현) 어디에서 왔는지 신경 쓰지 않습니다.

또는 당신이 당신의 은유에 더 가깝게 만들고 싶다면, 당신의 수업은 아이이고, di 프레임 워크는 엄마이고, 장난감은 다른 구성 요소입니다. 아이는 장난감이 어디에서 왔는지 신경 쓰지 않습니다.

내 관점에서, 당신의 은유와 관련하여 DI와 비 DI의 차이는 비 DI 시스템에 대한 것이며, 각 사람은 자신의 장난감을 만들어내는 방법을 알아야하며 그들이 만드는 장난감 만 사용할 수 있습니다. DI를 사용하면 사람이 주어진 장난감을 사용합니다. 그들은 그들을 만드는 방법을 모르지만 장난감이 어떻게 행동하는지 아는 한 주어진 장난감을 가지고 놀 수 있습니다.

레고스.

레고 블록을 하나 이상의 인터페이스 (위에 작은 범프)를 노출시키고 하나 이상의 세터 또는 생성자 인수 (하단의 구멍)를 노출시키는 소프트웨어 구성 요소로 생각하십시오.

레고 상자를 구입할 때 블록은 사전 조립 (하드 타이어링)이 아닙니다. 그들은 독립적 인 구성 요소입니다. 그런 다음 인터페이스 (범프)를 세터/생성자 (구멍)에 연결하여 조립합니다 (와이어). 각 블록은 다른 블록에 대해 직접 전혀 모릅니다. 블록 이외의 다른 것, 즉 당신 (또는 main () 또는 스프링 구성 파일 등을 조립하는 데 필요합니다.

나는 알고있다 ... 레고가 크게 균일 한 인터페이스를 가지고 있기 때문에 이것은 조금 분해한다. 그러나 그것은 나에게 효과적이다 :-)

컴퓨터 시스템을 사용합니다. 시스템 블록이 있고 (DI) 모니터, 키보드 및 마우스에 연결합니다. 시스템 블록은 모니터가 DVI 장치라는 것을 알고 있지만 어떤 모니터가 정확하게 어떤 모니터인지 신경 쓰지 않습니다. USB 마우스를 사용하는 방법을 알고 있지만 날씨를 알거나 관리하지 않습니다. 광학 또는 볼 롤링 마우스입니다.

당신 - DI 프레임 워크.
시스템 블록 - 시스템이 제공됩니다.
모니터/마우스/키보드 - 시스템 블록에 DI (귀하)가 제공하는 서비스.

장난감은 의식하지 않습니다. 그들은 단지 사람이 끈의 비트를 고리에 묶게하고, 어떤 일이 일어나면 후크가 돌아가고 끈이 켜져 있으므로 어떤 일이 일어났습니다.

내가 들었던 은유 중 하나는 그것을 CD 플레이어와 관련시키는 것이었다. 플레이어는 어떤 CD를 넣었는지 신경 쓰지 않습니다. 그러나 플레이어에 주입되는 각 CD는 플레이어가 요구하는 내용에 따라 다른 기능을 제공합니다.

그것은 사무라이와 무기에 관한 것입니다. Ninject를 확인해보십시오. http://ninject.org/. 흥미로운 은유를 위해 "도조 방문"캐릭터로 가십시오. 이것이 당신이 의미하는지 확실하지 않지만 그럼에도 불구하고 창의적입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top