2009-05-19 8 views
3

저는 다른 어셈블리 (프로젝트 모듈, 이미징 모듈 등을 상상해보십시오)가있는 프로젝트에서 작업하고 있습니다. 이 프로젝트에서 모든 인터페이스는 하나의 인터페이스 어셈블리 (인터페이스 IPrinterModule, IImagingModule 등으로 Interfaces.dll을 상상해보십시오) 내에서 선언됩니다.인터페이스를 선언 할 위치는 어디입니까?

저는 카우보이 코더입니다. 그렇기 때문에 SO-community에게 이것이 실제로 가장 좋은 방법인가, 더 좋은 방법으로 어떻게 할 수 있는지 물어야합니다.

답변

4

를 구현하는 어셈블리에 선언됩니다. 인터페이스를 현재 (현재) 구현과 분리하고 싶으므로 향후 다른 구현을 제공하는 것이 쉽습니다. Martin Fowler는 이것을 Separated Interfaces 패턴으로 설명했습니다.

인터페이스에 서로 종속성이있는 경우 (IPrinter가 IImageXXX를 반환합니까?) 순환 빌드 종속성을 피하기 위해 동일한 어셈블리에서 실제로 필요합니다.

+0

개체를 반환하는 IPrinter가 매우 유용합니다. 또한 링크. 감사합니다. – Inno

+0

"IPrinter가 '이미지'를 반환하는 아주 좋은 점입니다. – Inno

6

나에게 좋을 것 같은데, 인터페이스를위한 별도의 어셈블리를 갖는 것은 꽤 흔하다. 특히 많은 플러그인을하는 시스템의 경우.

대부분이 인터페이스를 사용하여 직교 구성 요소간에 느슨하게 연결된 브리지를 만들 수 있습니다 (좋은 결과가 좋음). 진정한 모듈 방식으로이 작업을 수행하는 유일한 방법은 인터페이스를 구현하는 모든 유형 또는 인터페이스를 참조하는 모든 유형이 실제로 동일한 인터페이스 유형을 사용하도록 해당 인터페이스에 대해 별도의 어셈블리를 만드는 것입니다. 정말로 유일한 옵션은 전체 시스템의 모든 것을 하나의 어셈블리로 컴파일하는 것입니다.

1

원형 참조가있는 경우 모든 인터페이스를 별도의 어셈블리로 유지하면 도움이됩니다. 지난 며칠 동안 워크 플로에 대해 연구하면서 인터페이스를 구현 한 어셈블리에서 선언 한 많은 코드 샘플 (Microsoft, codeproject 및 기타 사이트)을 읽었습니다. IPrinterModule처럼

우리는 유사한 접근 방식을 채택

+0

다른 DLL에서 플러그인을 구현하는 클래스가있을 수 있습니다 ... 플러그인처럼. – CSharpAtl

관련 문제