2013-09-30 4 views
0

내 프로그램에서 IInterface1, IInterface2, IInterface3, IInterface4, IInterface5와 같은 몇 가지 인터페이스를 정의했습니다. 구체적인 클래스에서 5 개의 인터페이스를 모두 구현해야하는 경우 해당 인터페이스를 직접 구현해야합니까?C에서 다중 인터페이스 구현

public class EntityClass: IInterface1,IInterface2, *** IInterface5 
{ 
} 

를 다음 또는 당신이 먼저 그 인터페이스를 상속하는 인터페이스를 만든 다음 해당 인터페이스를 구현하는 것이?

public interface IEntity: IInterface1,IInterface2, *** IInterface5 
{ 
} 

public class EntityClass:IEntity 
{ 
} 
+0

두 방법 모두 나에게 좋아 보인다. 두 번째 것은 재사용이 가능합니다. 예를 들어 많은 다른 클래스에서'IEntity'을 구현해야하고 코드가'IEntity'를 단일 개념 단위로 취급하도록합니다. –

+2

소비자에게 무엇을 노출해야하는지에 따라 다릅니다. 인터페이스 분리는 괜찮습니다 .. 그리고 그들 모두의 계약을 정의하는 "우산"인터페이스가 있다면 그것은 또한 괜찮습니다. OCD에 –

답변

4

인터페이스의 상속은 "is-a"관계를 나타냅니다. IEntity의 모든 구현이 또한 IInterface1 일 경우 IInterface1에서 IEntity를 상속받습니다.

예 : 공용 인터페이스 IPanda : IBear ​​

아마하지 : 공용 인터페이스의 IAccountant : IObsessiveCompulsiveDisorder

그것은 당신의 사용 사례에 따라
+0

웃긴 :) 내 아내는 공인 회계사입니다 :) – DRapp

2

.

IEntity에 항상 다른 인터페이스가 포함 된 경우 다른 인터페이스를 구현하는 것이 훨씬 쉬울 것입니다.

그렇지 않은 경우 클래스가 필요하지 않은 메소드를 구현하지 않아야하며 가능한 한 적은 수의 구현 만 필요로하는 방식으로 추상화해야합니다.

즉, 하나 또는 두 개의 클래스에만이 기능을 사용하면 중간 인터페이스에서 그룹화하지 않고 인터페이스 목록을 사용할 수 있습니다.

1

두 가지 방법 모두 모범 사례의 맥락에서 유효합니다. 그러나, 그것은 당신의 디자인에 전적으로 의존합니다. 상속에 접근하는 가장 좋은 방법은 상속받는 것을 다시 시도하고 이해하는 것입니다.

예를 들어, "모든 EntityClass가 IEntity입니까?", 이는 사실 일 수 있습니다. 그러나 "모든 EnetityClass가 인터페이스 1이고 인터페이스 2가 다른 것입니까?"라는 질문은 일부 인스턴스에는 적용될 수 있지만 다른 인터페이스에는 적용되지 않을 수 있지만 모두 IEntity에서 구현됩니다.

하나의 인터페이스에 많은 인터페이스 구현을 집계 할 때의 문제점은 구현 자체가 인터페이스 중 일부만 필요로 할 때 인터페이스가 많은 인터페이스를 벗어나 더 많은 클래스를 구현할 때 발생할 수 있습니다. 상속의 나무가 합리적인지 확인하기 위해 디자인을 수행하십시오.