하나의 공통 인터페이스를 사용하는 세 개의 클래스가 있습니다. 그러나 한 클래스에서 필자는 인터페이스 정의 함수 외에도 하나의 함수 (추가 함수())를 가지고 있습니다. 이 인터페이스 유형 참조가 서비스 레이어 메소드에 매개 변수로 전달된다고 가정하고, 추가 기능을 호출해야한다면 어떻게해야합니까? (즉, 90 % 유사도이지만 10 % 변형이있는 동안 인터페이스 구동 디자인을 만들었습니다. 하나의 추가 함수()처럼) 디자인이 괜찮습니까? 아니면 추상 클래스 또는 다른 것으로 시도해야합니다 ..........인터페이스를 구현하는 클래스에는 몇 가지 추가 기능이 있습니다. 어떻게 처리 할 수 있습니까?
답변
추가 기능을위한 다른 인터페이스 만들기 - 클래스를 가질 수 있습니다 여러 인터페이스를 구현
를 필요시 서비스 계층이 추가 인터페이스를 사용해야합니다
당신이 코드가있는 경우 :..
을 당신이 할 수있는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 즉 좀 지저분가 비록 - 당신은 몇 가지 코드를 붙여 넣으면 우리가 아마 더 당신을 도울 수 있습니다.
Alex의 답변을 피기 백하려면 추가 방법으로 IMyOtherInterface라는 두 번째 인터페이스를 정의 할 수 있습니다.
void Op(IMyInterface x, IMyOtherInterface y) {
x.This();
x.That();
if(y != null) {
y.TheOther();
}
}
메소드를 호출 할 때 클래스가 두 인터페이스를 모두 구현하면 두 번 전달할 수 있습니다. 그렇지 않으면 한 번. 구현시 두 인터페이스를 모두 구현하는 클래스가 동일한 클래스라는 것을 알 필요가 없습니다. VB 또는 4.0 C#을 사용하는 경우 두 번째 매개 변수를 '선택 사항'으로 표시 할 수 있습니다.
세 번째 옵션은 원래 인터페이스에 추가 메소드를 추가하는 것이지만 "DoFinalization()"과 같이 더 일반적인 메소드라고하고 구현 클래스에 빈 구현 만 허용합니다. 그것.
실제로 두 개의 인터페이스가 있으며 그 중 하나는 다른 인터페이스를 구현합니다.
public interface IMyInterfaceA
{
void Method1();
void Method2();
}
public interface IMyInterfaceB: IMyInterfaceA
{
void ExtraMethod();
}
그런 다음 서비스 계층 방법은 ExtraMethod 여부 필요 여부에 따라 IMyInterfaceA 또는 IMyInterfaceB을 받아 들여야 하나.
IMyInterfaceA를 허용 할 수있는 방법이 있지만 IMyIntefaceB를 사용할 수있는 경우 '특수'작업을 수행하는 경우 리플렉션 (또는 'as'연산자)을 사용하거나 더 나은 여전히 2 개의 오버로드 된 버전을 제공 할 수 있습니다. 컴파일러로서의 메소드는 적절한 경우 IMyInterfaceB에 대한 호출을 해결해야합니다.
귀하의 답변에 감사드립니다. 하지만 내지도 중 하나는 var y = x와 같은 서비스 계층 수준 구문을 SpecialClass로 보았습니다. 그리고 그것은 좋은 디자인 접근법이 아니라고 말했다. 그는 사업 관리자 수준에서 공장을 사용하도록 제안한 후 이러한 종류의 주조를했습니다.
- 1. 이 속성을 어떻게 추가 할 수 있습니까?
- 2. 몇 가지 다른 유형의 데이터 처리
- 3. Sharepoint 2010. 몇 가지 간단한 질문이 있습니다.
- 4. 떠나 몇 가지 지시를 처리 다른
- 5. 몇 가지 보안 및 오류 처리 문제가 있습니까?
- 6. 인터페이스를 구현하는 Java 클래스가 주석을 자동으로 상속 할 수 있습니까?
- 7. MSDN : 클래스/인터페이스를 상속/구현하는 방법을 어떻게 알 수 있습니까?
- 8. lift-json JValue 클래스에는 scala.xml.Node.text 메소드와 동일한 기능이 있습니까?
- 9. VB6 클래스에는 소멸자가 있습니까?
- 10. 아이템에 한 번만 추가 할 수 있습니다.
- 11. 제네릭 인터페이스를 구현하는 데 문제가 있습니다.
- 12. .NET의 강력한 형식의 DataSet에 인터페이스를 추가 할 수 있습니까?
- 13. 공유 라이브러리에 몇 가지 문제가 있습니다.
- 14. 템플릿 클래스에는 순환 종속성이 있습니다
- 15. 필기 인식에 관한 몇 가지 질문이 있습니다.
- 16. Firefox를 컴파일하고 몇 가지 확장자를 포함 할 수 있습니까?
- 17. 몇 가지 속도 매크로를 정의 할 수 있습니까?
- 18. 인터페이스를 통해 개체를 호출 할 수 있습니다.
- 19. Visual Studio 2008 추가 기능에서 클래스 속성이 구현하는 인터페이스를 어떻게 알 수 있습니까?
- 20. 몇 가지 Java 버전이 있습니까?
- 21. C#으로 시작하고 몇 가지 질문이 있습니다.
- 22. git의 .gitattribute는 몇 가지 예외를 제외하고 모든 파일을 바이너리로 처리 할 수 있습니까?
- 23. 자바 처리 1 인터페이스를 구현하는 구체적인 클래스의 오류
- 24. 하나의 ActiveScheduler가 몇 개의 활성 객체를 처리 할 수 있습니까?
- 25. XStream은 추가 작업없이 복잡한 객체를 처리 할 수 있습니까?
- 26. 몇 가지 함수 파일이 PHP에 포함되어 있습니다.
- 27. Model 클래스에는 무엇이 있습니까?
- 28. Erlang에서 SIGINT를 어떻게 처리 할 수 있습니까?
- 29. MySQL은 몇 개의 데이터베이스를 처리 할 수 있습니까?
- 30. backBarButtonItem을 어떻게 처리 할 수 있습니까?