2008-09-05 12 views
10

나는 새로운 시스템을 설계하고 있는데이 시스템으로 시간이 지남에 따라 증가 할 것이다 인터페이스를 많이 가지고있다. 이인터페이스 및 버전

ISomethingV01 
ISomethingV02 
etc 

을 인터페이스와 내가 그래서 지금 내가 무슨 방법 (2)를 추가해야 다음이

public interface ISomething{ 
     void method(); 
} 

을 지명 할 수있는 가장 좋은 방법은 무엇입니까?

public interface ISomethingV2:ISomething{ 
     void method2(); 
} 

또는 다른 동일한 방식으로?

답변

5

이상적으로는 인터페이스를 자주 변경하지 않아야합니다. 인터페이스를 변경해야 할 필요가 있다면 인터페이스의 목적을 재고하고 원래 이름이 계속 적용되는지 확인해야합니다.

인터페이스가 변경되고 인터페이스 변경 사항이 작고 (항목 추가) 전체 코드 기반을 제어 할 수 있다고 생각되면 인터페이스를 수정하고 모든 컴파일 오류를 수정해야합니다.

변경 방법이 인터페이스 사용 방법을 변경 한 경우 대체 사용 패턴을 지원하기 위해 별도의 인터페이스 (다른 이름을 사용하는 경우가 많음)를 만들어야합니다.

는 ISomething, ISomething2 및 ISomething3을 만드는 끝날 경우에도 인터페이스의 소비자는 차이가 인터페이스 사이에 무엇인지 알아내는 힘든 시간이있을 것이다. ISomething2는 언제 사용해야하며 언제 ISomething3을 사용해야합니까? 그럼 당신은 ISomething과 ISomething2를 obsoleting하는 과정에 대해 가야합니다.

2

인터페이스의 목적은 형식이 구현해야하는 추상 패턴을 정의하는 것입니다. 당신은 동일한 인터페이스의 여러 버전을 생성하여 코드 재사용이나 확장 가능한 디자인의 형태로 아무것도 얻을 수없는

public interface ISomething 

public class Something1 : ISomething 
public class Something2 : ISomething 

:로

이 구현 좋을 것이다. 사람들이 당신의 게시물을 downvote 이유

2

나도 몰라. 좋은 명명 가이드 라인은 입니다. 매우이 중요합니다.

당신은 이전과의 호환성을 유지해야하는 경우. 동일한 인터페이스의 버전은 상속을 고려합니다. 당신이 규칙을 다음과 같은 고려 인터페이스의 새로운 버전을 소개해야하는 경우 : 당신 인터페이스를 의미 접미사를 추가 할 수

보십시오. 간결한 이름을 만들 수없는 경우 버전 번호를 추가하는 것이 좋습니다.

4

나는 인터페이스를 변경하면 심각한 결정이다, Garo Yeriazarian에 동의합니다. 또한 새로운 버전의 인터페이스 사용을 권장하려면 구 버전을 폐기로 표시해야합니다. .NET에서는 ObsoleteAttribute을 추가 할 수 있습니다.

6

나는 당신이 인터페이스를 과잉한다고 생각합니다.

마이어 (Meyer)와 마틴 (Martin)이 우리에게 말했습니다."

하고 Cwalina (등)이 되풀이 :

워크 설계 지침에서

... 일반적

, 클래스 노광 추상화 선호 구조체이다 인터페이스의 주요 단점. 인터페이스를 출하하면 클래스의 요소 집합이 영원히 고정되어 있습니다. Any인터페이스의 출하시에는 인터페이스가 출하되기 때문에 클래스의 경우보다 유연성이 떨어집니다. 인터페이스에 추가하면 기존 유형 인 이 인터페이스를 구현하지 못할 수 있습니다.

클래스는 훨씬 더 많은 유연성을 제공합니다. 이 이미 배송 된 클래스에 멤버를 추가 할 수 있습니다. 메소드가 추상이 아닐 경우 (즉, 메소드의 구현을 제공 할 때 ), 기존 파생 클래스는 계속 변경되지 않고 계속 작동합니다.

alt text