2009-10-19 3 views
2

많은 사람들이 사용하고있는 프로젝트에 대해 잘 모릅니다. 우리는 CheckStyle 경고를 가져 오는 작업을 상당히 잘 수행했으며, 바이너리 호환성을 손상시키지 않으면 서 CheckStyle 경고가 낮습니다.코드 정리로 이진 호환성이 깨졌습니다.

대부분의 나머지 경고는 최종 키워드가 누락 된 상수 (public static final) 때문에 발생합니다. 상수의 이름을 지정하면 개발자가 읽기 전용으로 의도했음을 분명하게 알 수 있지만 단순히 최종 정의되지 않았습니다.

개발자가이 감시 기능을 사용하는 아주 끔찍한 코드를 작성하지 않았다면 코드를 추가해도 코드가 손상되지 않습니다.

현재 버전 번호는 1.2.1입니다. 변경 사항을 적용하여 2.0으로 이동하거나 적용하고 1.3으로 롤아웃 하시겠습니까? 전체 2.0을 요구하는 꽤 작은 변화처럼 보입니다.

어떻게해야합니까?

+0

"개발자가이 감시 기능을 사용하는 아주 끔찍한 코드를 작성하지 않았다면"- 또는 아마도 저조한 디자인 API를 해결하기 위해? –

+0

@ mmyers : 나는 당신이 그것을 자바와 관련 있다고 추측했는지 의아하게 생각한다. -? – OscarRyz

+3

@Oscar Reyes : 상수에 대해 'final' 키워드가있는 다른 언어의 이름을 지정하십시오. – Powerlord

답변

3

나는이 사실을 이미 알고있을 것이라고 확신하지만, "이것이 안전/단순/걱정 없음"업그레이드로 내려와야 할 것으로 생각됩니다.

  • 포인트 릴리스는 안전하고 일상적인 것으로 간주됩니다. 일부 프로젝트에서는 완전히 버그 수정으로 구성되어야합니다. 다른 프로젝트에는 문제가 발생할 가능성이 적은 경우 새로운 기능이 포함됩니다.
  • 새로운 주 버전 출시, 나는 그것이 또한 얼마나 근접에 따라 생각
  • 새로운 주요 X.0 버전 출시

:-) 정교한 사용자가 매우 의심 고려 적응이 필요할 수 있습니다 진화 변경 사항이 포함되어 당신은 다음 주요 버전 릴리스됩니다. 머지 않아 문제가되는 포인트 릴리스가 발생하지 않도록하십시오. 개발자가 꽤 끔찍한 코드를 작성하지 않는 한

0

... 당신은 항상 안전한 포인트 릴리스와 알파 주요 릴리스를 할 수 있지만 다음 주요 릴리스가 탈출구 미래에 있었다면이 이상한 수 있습니다 그 이 감독을 사용하여 코드를 추가하면 코드가 손상되지 않습니다.

더 이상 작동하지 않을 이전의 최종 클래스의 하위 클래스를 만드는 것과 비슷합니까?

나는이 2.0가 될 것을해야한다고 생각 당신은 1.x에서 시리즈

또한 여기 API에 대한 흥미로운 비디오의 지원을 유지해야한다 : 자바에서 "How to design a good API and why it matters"조슈아 블로흐 작성자가 그렇게 핵심 라이브러리를 지금 작업 Google에서

+1

그것은 수업이 아니 었습니다. 그것은 결승전을 놓친 상수였습니다. –

+0

이러한 정적 속성을 수정할 수 있습니다. 예를 들어, 다음과 같은 것을 깨뜨릴 수 있습니다 :'if (YourClass.intField ++> 1) {...' – OscarRyz

+0

분명히. 하지만 요점은 아닙니다. –

2

나는 그들을 부숴 라. 당신이 돌연변이 정적이라면 당신은 잘못하고 있음을 알아야합니다. 그러나 클라이언트를 다른 릴리스로 분리하여 클라이언트가 패닉 상태가 아닌 다른 관련성이없는 수정 작업이 필요하기 때문에 원활하게 업그레이드 할 수있는 기회를 얻을 수 있습니다.

4

제 생각에 바이너리 호환성을 손상시킬 수있는 변경 사항은 주요 버전이 출시 될 때까지 보류해야합니다. 즉, 귀하의 질문은 "어떤 버전 번호를 사용해야합니까?"가 아니라 "언제 이러한 변경을해야합니까"가되어야합니다.

바이너리 호환성을 전적으로 위임 한 경우 업그레이드 비용을 정당화하는 중요한 개선 사항이 포함 된 릴리스가 릴리스 될 때까지 이러한 변경 사항을 연기해야합니다. 예를 들어, KDE 프로젝트는 주요 릴리스에 바이너리 호환성 요구 사항을 부과합니다. 즉, 해당 릴리스의 수명 동안 개선 된 사항은 이전 버전에 대해 컴파일 된 응용 프로그램을 손상시킬 수 없습니다. 따라서 코드를 정리하고자하는 개발자는 다음 주요 버전까지 기다려야합니다.

모든 주요 기능을 갖춘 주요 릴리즈를 준비하고 나면 필요하다고 생각되는 바이너리 호환성 변경 사항을 수행하십시오.이 경우 무언가가 깨지면 놀라운 일이 아닙니다.

당신이 영리하고 싶다면 사전 처리기를 구현하고 코드를 두 번 컴파일 할 수 있습니다. 한 번은 결승전과 한 번만 컴파일합니다. 이것은 진정한 결승전을위한 디딤돌로 사용될 수 있지만 그 동안에 유지 보수 비용은 높을 것입니다.