2008-09-11 8 views
5

나는 인터페이스와 구현을 분리시키는 아이디어를 좋아한다. 그러나 어떻게 분리 되는가? 인터페이스 정의가 별도의 .Net 어셈블리에 있습니까? 솔루션의 모든 인터페이스를 정의하는 단일 프로젝트가 있습니까? 그렇지 않으면 인터페이스의 순환 종속성에 문제가 있습니까?인터페이스는 "물리적으로"어디에 있어야합니까?

답변

7

도메인 개체와 인터페이스를 별도의 "도메인"어셈블리에 넣으십시오.
이 어셈블리는 코어 .net 어셈블리 이외의 다른 어셈블리를 참조하면 안됩니다.

이렇게하면 도메인/서비스 모델 및 구현에서 깨끗한 분리를 얻을 수 있습니다.

편집 :
http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

+0

양파 아키텍처에 대한 Jeffery Palermo의 훌륭한 기사에 대한 링크를 포함하면 가치가 있다고 생각합니다. http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ –

+0

감사합니다. 이 기사에서는 개념을 매우 잘 설명합니다. –

3

난 그냥 그것을 위해 별도의 어셈블리로 인터페이스를 넣어하지 않을 것입니다. 그러나 인터페이스가 IPC 또는 확장 성 아키텍처의 모든 형태에 참여하는 경우 자체 인터페이스를 제공하는 것이 좋습니다.

당신이 서로 참조 할 필요가 프로젝트가있는 경우

은 다음 네, 당신은 인터페이스에 대한 별도의 조립이 필요합니다,하지만 당신은 조심스럽게 순환 종속성을 해결하는 또 다른 방법이 있는지 확인하기 위해 아키텍처를 검토해야한다.

1

공용 영역의 이름 다음에 하위 폴더 (및 네임 스페이스)의 인터페이스를 가장 일반적으로 또는 간단한 구현으로 유지하는 것을 선호합니다.

 
\project\ 
\project\IAppender.cs 
\project\Appender\ 
\project\Appender\FileAppender.cs 
\project\Appender\ConsoleAppender.cs 

이 수업을 프로젝트 외부로 확장하는 경우. 특별한 프로젝트에서 마찬가지로 폴더/네임 스페이스를 반복하십시오.

 
\specialproject\ 
\specialproject\Appender\ 
\specialproject\Appender\MemoryAppender.cs 
0

지금 당장 작업하고있는 프로젝트에서 인터페이스와 관련된 기본 클래스는 함수간에 논리적으로 분리 된 어셈블리로 들어갑니다. 이러한 공급자 및 클래스의 구현은 코어 어셈블리 내부에 있습니다. API를 사용하는 사람들이 명확하고 논리적 인 방법으로 API dll 중 하나 이상을 참조 할 수 있다는 아이디어가 있습니다.

작은 응용 프로그램은 이러한 종류의 분리를 필요로하지 않습니다. 하지만 인터페이스를 어디에 두어도 기본 클래스와 동일한 네임 스페이스에 유지할 수 있습니다.

관련 문제