2010-07-07 12 views
2

이 문제에 대한 제 생각은 있지만 라이브러리와 제품이 많아서 타사 라이브러리가 API에 흘러 들어간 것으로 보입니다. 로깅은 이것의 완벽한 예입니다. 거의 모든 것이 구현하고 제공 할 수있는 공급자 인터페이스를 사용하는 대신 로깅 API를 구성해야 할 필요성을 드러내고 있습니다.API의 일부로 타사 라이브러리를 노출하는 것이 좋은 경우는 언제입니까?

너무 많이 묻는 모든 라이브러리를 감추고 숨기려고합니까? 문제가 될만한 가치가 있습니까?

답변

0

나는 그것이 당신이하는 일에 달려 있다고 생각합니다. 당신이 이야기하고있는 예제를 생각해 보면 제 삼자 API를 완전히 숨기면 엄청난 시간 낭비가 될 것이며 최종 사용자에게 덜 강력한 패키지를 제공 할 것이라고 생각합니다.

예를 들어 Log4Net을 사용하고 모든 구성 측면을 숨기면 통합/노출하는 항목에 대한 유연성 만 제한됩니다. 이제, 뒤집어 진면에서, 당신이하고 싶은 것이있는 시간과 장소가 있습니다.

그래서 내가 생각하기에, 길고 짧은 것은 참된 비즈니스 필요가있는 경우에만 해당됩니다. 적어도 그것은 $ 0.02입니다.

+0

차이점은 구성 변경은 로컬이므로 일부 파일에만 영향을줍니다. 호환되지 않는 log4net으로 업그레이 드해야 할 필요가 생기면 코드베이스의 절반이 바로 잘못되어 손상됩니다. 이것은 하나의 주요 클래스가 더 이상 사용되지 않거나 새로운 동급 클래스가 아닌 경우 java world/log4j에서 발생했습니다. –

1

라이브러리에 대한 모든 것을 숨기고 숨길 필요가 없을뿐만 아니라 종종 비생산적입니다.

예를 들어 OAI-PMH이라는 특정 HTTP 프로토콜을 구현하는 라이브러리가 있습니다. 이 라이브러리는 다양한 구성 매개 변수 집합을 가지고있는 Apache HttpClient 4.0 위에 구현됩니다. HttpClient 매개 변수를 래핑하는 자체 구성 매개 변수를 작성하는 대신 Apache library's configuration interface을 자체 팩토리 및 생성자로 노출합니다.

모든 Apache 매개 변수를 래핑하려고 시도했다면 몇 달이 걸렸을 것입니다. 중요한 매개 변수를 우리 도서관 이용자를 대신하여 결정한 경우에만 매개 변수를 감쌀 경우 라이브러리로 할 수있는 일이 제한 될 것입니다.

+0

그리고 HttpClient를 다시 작성하면 어떻게됩니까? 래핑은 항상 x를 y로 변환 할 수있는 기회를 제공합니다. 즉, 고객이 개입해야하는 문제를 해결할 수 있습니다. –

+0

HttpClient 5.x가 있다고해서 HttpClient 4.x가 갑자기 작동을 멈추지 않는다는 것을 의미하지는 않습니다. 타사 라이브러리 제공 업체와의 관계가 불량하거나 협력 관계에있는 경우 공급 업체를 변경하거나 직접 작성하는 것이 좋습니다. 위의 "칭의"는 런타임과 함께 제공된 클래스 라이브러리에 적용될 때도 마찬가지로 작동합니다. java.lang.Strings도 랩핑합니까? –

+0

그들은 3과 다시 호환되지 않는 HttpClient 4를 다시 작성하지 않았습니까? String과 같은 값 유형을 HttpClient와 같은 서비스와 비교할 수 없으며 intfs입니다. 하나는 거의 항상 클래스이고 다른 하나는 intf 뒤에 숨겨진 값 유형입니다. 그래서 HttpC를 업그레이드해야 할 때 어떻게됩니까? CLogging과 같은 종속성이 발생하면 어떻게됩니까? –

관련 문제