2017-03-20 1 views
1

버전이 지정된 외부 API를 사용하는 클래스가 포함 된 Java 패키지의 이름을 지정하는 방법에 대한 규칙이 있습니까?외부 API 버전 지정을위한 Java 패키지 이름 지정

우리는 서비스의 major-minor 의미 체계 버전 체계가 있다고 가정하고 해당 API의 특정 버전과 호환되고 해당 API에 바인딩 된 소비자를 구현해야합니다. 패키지 (및 클래스)의 이름을 지정하는 가장 좋은 방법은 무엇입니까?

현재 우리는 ${service}_${M}_${N} (M = 주 버전, N = 부 버전) 구성표를 사용하고 있습니다. 예 : com.example.theService_1_0.. 그러나 sonarqube는 관례와 일치하지 않는다고 불평하고 있습니다. 물론이 규칙을 비활성화 할 수는 있지만 모범 사례가 있는지 궁금합니다.

WebService, REST 및 CORBA에 대한 소비자 구현이 있으므로 REST에만 국한되지 않는 일반적인 접근 방식을 찾고 있습니다. 그리고 확실하지는 않지만, 인공물 버전 관리 (maven 에서처럼)는 API가 아닌 구현 버전과 관련되기 때문에 여기서 잘 작동합니다.

나는 api versioning 주위에 질문이 있지만 소비자가 아니라 생산자에 관한 것임을 알고 있습니다.

+0

잠재적 인 불필요한 코드 재 작성을 의미하지는 않습니다. 제작자가 버전을 변경할 때마다 패키지 이름과 해당 클래스를 사용하는 모든 클래스의 모든 import 문을 변경해야합니다. – 7663233

+0

필자는 금융 업계의 일부 프로젝트에서 코드 중복 비용과 나란히 나란히두고 소비자를 별도로 유지 관리하는 것으로 보아 하나의 소비자 버전으로 변경해도 다른 영향에는 영향을 미치지 않습니다. 새 버전이 나오면 (몇 년 후) 기존 코드를 복제하여 시작합니다. 그것은 기본적으로 비공유 접근 방식입니다. 확실히 실용적인 관행이지만, (더 나은?) 대안이 있는지 궁금합니다. –

+0

대상 API 버전 다음에 패키지 이름을 지정하지 않습니다. 프로젝트는 특정 API 버전에 종속성을 선언해야하며, 다른 API 버전 (예 : 종속성 버전을 변경할 때)을 목표로 할 때마다 자체 버전 번호를 사용하여 프로젝트를 버전화해야합니다. 예 : myproject 버전 1.1 .8에서는 theapi 버전 2.3.0을 사용하고 myProject 버전 1.2.0에서는 theapi 버전 2.4.6을 사용합니다. – Berger

답변

1

예, Java 패키지 이름은 종속성 버전을 나타내는 데 강력하고 모호한 규칙이 있습니다. 이 아닙니다.

외부 API의 새 버전을 사용하도록 응용 프로그램을 변경하는 경우 새 버전의 응용 프로그램을 만듭니다. 찾고있는 버전 번호는 응용 프로그램의 버전 번호입니다. 많은 Java 프로젝트에서 종속성 버전은 Maven 구성 파일에 의한 관리입니다.

클래스가 특정 API 버전을 사용하는 경우 클래스와 패키지 이름에는이 정보를 노출하는 비즈니스가 없으며 다른 정보는 제외하고 캡슐화에 위배됩니다. 이 이름들은 다른 목적을 가지고 있습니다.

HTTP/REST API 또는 Java API를 사용할 때도 마찬가지입니다. 결국, 나는 당신이 당신의 클래스 이름을 TheServiceWithLog4J_12_1_5이라고 생각하지 않습니다. 나는 적어도 희망하지 않는다.

이 외부 API의 여러 버전을 동시에 지원해야하는지 여부는 언급하지 않았습니다. 비록 그렇게했다하더라도 패키지 이름에 API 버전 번호를 표시하는 것을 권장하지 않습니다. 대신, 을 나타내는 패키지 이름을 사용하십시오.에는 두 가지 버전과 중요한 차이점이 있습니다.

관련 문제