0

이 질문은 설명하기가 어렵지만 최선을 다할 것입니다.Inteface 및 프로젝트 구조를 통한 의존성 주입

제 3 자 서비스에서 데이터를 가져와 비 직렬화 및 일부 스레드 관리 작업을 수행하는 UI를 만들어야하는 프로젝트가 있습니다.

이제 내 프로젝트 구조는 Visual Studio에서 하나 개의 솔루션 아래 :

프로젝트 A : UI를

프로젝트 B : 타사 서비스에서

프로젝트 C 데이터를 얻을 수있는 API : 스레드 관리자 API

참고 : 프로젝트 B에는 IB 인터페이스가 있고 C에는 종속성 주입을 돕는 IC 인터페이스가 있습니다. 프로젝트 B 및 C는 앞으로 다른 팀에서 사용할 예정입니다.

프로젝트 A는 종속성 삽입을 위해 IB 및 IC 인터페이스를 모두 사용합니다.

이제 IOC에 대한 이해를 알려 드리겠습니다. DIP에 따르면 고급 모듈은 하위 모듈에 종속되어서는 안되며 상위 모듈과 하위 모듈 모두 추상화에 의존해야한다고 DIP에 말합니다. 하위 수준 모듈 변경시 상위 수준 모듈의 변경을 방지하려면 하위 수준 모듈이 상위 수준 모듈에 필요한 개체 생성 및 인터페이스를 제어하지 못하도록 제어를 반전해야합니다.

위의 정의에 따르면 IB 인터페이스와 IC 인터페이스는 프로젝트 A 권한에서 정의해야합니다. 프로젝트 A에 있다면 다른 팀이 IB 및 IC 인터페이스를 어떻게 사용합니까? 인터페이스를 저장하기위한 또 다른 프로젝트를 만들지 않습니까?

+1

UI가 역 직렬화를 수행합니까? 그건 UI가 아니에요 ... – Steve

+0

아니, 내가 할 별도의 프로젝트가 .. 위의 설명했다. – Debdeep

답변

1

은 시나리오에 대해 다음 프로젝트 조직을 고려 앱과 UI에서). B, C, D, E, F를 알고 있습니다.

프로젝트 B : UI 또는 프로젝트를 모듈화하는 데 필요한만큼의 프로젝트. 알고 C

프로젝트 C : 비즈니스 로직 (gets data from a third party service and does deserialization and some thread management work). 알고 D

프로젝트 D : IB 및 IC가 포함 된 인터페이스 (별도의 전용 프로젝트가있을 수도 있음).

프로젝트 E : The API to get data from third party service가 알고 D

프로젝트 F는 : The Thread Manager API는 D에게

주목하라 UI에서 디커플링 및 비즈니스 로직 계층을 통해 구현을 알고있다. 이렇게하면 비즈니스 로직이나 UI를 변경하지 않고도 구현 세부 사항을 전환 할 수 있습니다. 또한 비즈니스 로직이 다양 할 경우 영향이 최소화됩니다.

DI에 관해서는 부트 스트 래퍼 프로젝트가 전체 그림을 가진 유일한 프로젝트이고 나머지는 부트 스트 래퍼에 의해 설정된 컨테이너가 인터페이스를 사용해야 만합니다.

+0

BI와 CI는 무엇입니까? IB와 IC는 무엇을 의미합니까? 그렇다면 우리는 인터페이스를 정의하는 별도의 프로젝트를 가지고 있습니까? – Debdeep

+0

@Debdeep @Debdeep 죄송합니다. 오타가되었습니다. 예. 별도의 프로젝트로 이동하여 구체적인 구현을 다른 프로젝트 (예 : 프로젝트 C)와 구분할 수 있습니다. – jnovo

+0

실제로 프로젝트 C와 E가 별도로 필요하지 않습니다. C가 데이터를 가져오고 나를 위해 deserialize하기 때문에 (비즈니스 로직이 필요하지 않습니다) C 내부에 있습니다. 하지만 프로젝트 C와 F를 다른 팀에 dll로 제공해야합니다. 그래서 나도 별도의 dll로 프로젝트 D를 공급해야합니까? – Debdeep

0

위의 정의에 따르면 IB 인터페이스와 IC 인터페이스는 모두 프로젝트 A의 오른쪽에 정의되어 있어야합니다 (예 : ).

아니요. '모듈'이라는 용어를 '클래스'로 바꾸어야합니다. 낮은 수준 [급] 및 하이 레벨과 로우 레벨 [클래스] 모두 추상화에 의존해야에 의존하지 않아야

고레벨 [급] :이 경우는 더 이해하기 위해 개시 .

종속성 삽입을 올바르게 수행하려면 해당 클래스와 추상화가 어느 어셈블리에 있는지는 중요하지 않습니다. 프로젝트가 커지면 (즉, 수백만 줄의 코드, 하나 또는 여러 팀이 작업하는 경우) Principles of Component Design을 준수하는 것이 중요 해집니다.

조립품 A와 B 모두 인터페이스 IB을 사용하고 조립품 A는 조립품 B에 의존하기 때문에 조립품에서 순환 참조 인 경우가 있으므로 IB을 조립품 A에 배치 할 수 없습니다. 어셈블리 B 또는 A와 B가 참조하는 새 어셈블리에 IB을 배치해야합니다.이 또한 분리 된 전용 부트 스트 래퍼 프로젝트에 갈 수있는 (UI를, 응용 프로그램을 실행 DI를 구성하고 설정을 담당하고, 부트 스트 래퍼 :

프로젝트 A :