2009-08-06 4 views
3

내부 통화 나 유형을 발견 할 때마다로드 블록을 밟은 것처럼 보입니다.내부 유형이 좋은 API 디자인을 손상 시키는가?

오픈 소스와 같은 코드에서 액세스 할 수 있다고하더라도 여전히 API 코드 자체에서 사용 가능하지는 않습니다. 즉 그것은 마치 수정되기를 꺼리는 것입니다.

절대적으로 필요한 경우가 아니면 내부 키워드를 사용하지 않아야합니까?

오픈 소스 API에 대해 묻습니다. 그러나 여전히 모든 사람이 API를 변경하려고하지는 않지만 주로 앱 자체에 대한 코드를 작성하는 데 사용합니다.

답변

12

DLL에 공개 API에 포함되지 않은 내부 형식이 있으면 아무 문제가 없습니다. 실제로 사소한 DLL 이외의 것이 있으면 내부 유형 (또는 적어도 비공개 형식)이없는 경우 나쁜 디자인의 부호 일 가능성이 높습니다.

왜 그런가요? 공개 API는 소비자가 사용하기를 원하는 객체 모델의 부분을 노출시키는 방법입니다. 완전히 공개 된 유형의 API를 사용한다는 것은 소비자가 DLL에있는 모든 것을 실제로 볼 수있게하려는 것입니다.

해당 입장과 함께 제공되는 버전 문제를 생각해보십시오. 개체 모델에서 문자 그대로 무엇이든 변경하는 것은 큰 변화입니다. 내부 유형을 사용하면 모델에 큰 유연성을 부여하면서 고객에 대한 변경 사항을 깨뜨리지 않아도됩니다.

5

API는 공용 유형과 구성원으로 구성되며 그 밖의 것은 구현 세부 사항입니다.

그렇다고해서 내부 유형이 특히 API에서 인터페이스 유형을 반환하고 해당 인터페이스를 구현하는 데 사용한 구체적인 유형을 드러내고 싶지 않을 때 매우 유용 할 수 있다고 생각합니다. 이는 API 디자이너에게 많은 유연성을 제공합니다.

+0

누군가 인터페이스에 액세스하려면 구현 된 클래스를 인스턴스화해야합니다. 그렇지 않으면 인터페이스 유형이 null입니다. 즉, 인터페이스 사용자는 구체적인 클래스/유형을 알아야합니다. 클래스가 내부 클래스이면 호출자 측에서 인스턴스화 할 수 없습니다. 따라서 구체적인 유형을 공개해야합니다! 어떻게 든 인터페이스를 쓸모 없게 만듭니다. – msfanboy

8

내부 유형은 명시 적으로 API에서 제외되는 형식입니다. 사람들에게 보이지 않게하는 것들만 내부에 표시해야합니다.

내 생각에 내부 형식이지만 공개 API에 중요한 추가 기능을 제공 할 것입니다. 나는 이것을 꽤 많은 프로젝트에서 보았다. 그것은 다른 사안입니다. 개인적인 유형이 공개되어 있어야만하는 것과 동일한 문제입니다.

일반적으로 좋은 프로젝트 에 내부 또는 개인 유형이 있어야합니다. 공용 API를 확장하지 않고도 필요한 기능 세트를 구현하는 데 도움이됩니다. 필요한 기능 집합을 제공하기 위해 공개 API를 가능한 작게 유지하는 것은 라이브러리를 사용할 수있게하는 요소의 일부입니다.

관련 문제