2010-07-10 3 views
0

하나의 공통 인터페이스를 사용하는 세 개의 클래스가 있습니다. 그러나 한 클래스에서 필자는 인터페이스 정의 함수 외에도 하나의 함수 (추가 함수())를 가지고 있습니다. 이 인터페이스 유형 참조가 서비스 레이어 메소드에 매개 변수로 전달된다고 가정하고, 추가 기능을 호출해야한다면 어떻게해야합니까? (즉, 90 % 유사도이지만 10 % 변형이있는 동안 인터페이스 구동 디자인을 만들었습니다. 하나의 추가 함수()처럼) 디자인이 괜찮습니까? 아니면 추상 클래스 또는 다른 것으로 시도해야합니다 ..........인터페이스를 구현하는 클래스에는 몇 가지 추가 기능이 있습니다. 어떻게 처리 할 수 ​​있습니까?

답변

0

추가 기능을위한 다른 인터페이스 만들기 - 클래스를 가질 수 있습니다 여러 인터페이스를 구현

를 필요시 서비스 계층이 추가 인터페이스를 사용해야합니다

0

당신이 코드가있는 경우 :..

을 당신이 할 수있는
void Op(IMyInterface x) 
{ 
    x.This(); 
    x.That(); 
} 

:

void Op(IMyInterface x) 
{ 
    x.This(); 
    x.That(); 

    var y = x as SpecialClass; 
    if(y != null) 
    { 
    y.TheOther(); 
    } 
} 

IMO 즉 좀 지저분가 비록 - 당신은 몇 가지 코드를 붙여 넣으면 우리가 아마 더 당신을 도울 수 있습니다.

0

Alex의 답변을 피기 백하려면 추가 방법으로 IMyOtherInterface라는 두 번째 인터페이스를 정의 할 수 있습니다.

void Op(IMyInterface x, IMyOtherInterface y) { 
    x.This(); 
    x.That(); 

    if(y != null) { 
    y.TheOther(); 
    } 
} 

메소드를 호출 할 때 클래스가 두 인터페이스를 모두 구현하면 두 번 전달할 수 있습니다. 그렇지 않으면 한 번. 구현시 두 인터페이스를 모두 구현하는 클래스가 동일한 클래스라는 것을 알 필요가 없습니다. VB 또는 4.0 C#을 사용하는 경우 두 번째 매개 변수를 '선택 사항'으로 표시 할 수 있습니다.

세 번째 옵션은 원래 인터페이스에 추가 메소드를 추가하는 것이지만 "DoFinalization()"과 같이 더 일반적인 메소드라고하고 구현 클래스에 빈 구현 만 허용합니다. 그것.

0

실제로 두 개의 인터페이스가 있으며 그 중 하나는 다른 인터페이스를 구현합니다.

public interface IMyInterfaceA 
{ 
    void Method1(); 
    void Method2(); 
} 

public interface IMyInterfaceB: IMyInterfaceA 
{ 
    void ExtraMethod(); 
} 

그런 다음 서비스 계층 방법은 ExtraMethod 여부 필요 여부에 따라 IMyInterfaceA 또는 IMyInterfaceB을 받아 들여야 하나.

IMyInterfaceA를 허용 할 수있는 방법이 있지만 IMyIntefaceB를 사용할 수있는 경우 '특수'작업을 수행하는 경우 리플렉션 (또는 'as'연산자)을 사용하거나 더 나은 여전히 ​​2 개의 오버로드 된 버전을 제공 할 수 있습니다. 컴파일러로서의 메소드는 적절한 경우 IMyInterfaceB에 대한 호출을 해결해야합니다.

0

귀하의 답변에 감사드립니다. 하지만 내지도 중 하나는 var y = x와 같은 서비스 계층 수준 구문을 SpecialClass로 보았습니다. 그리고 그것은 좋은 디자인 접근법이 아니라고 말했다. 그는 사업 관리자 수준에서 공장을 사용하도록 제안한 후 이러한 종류의 주조를했습니다.

관련 문제