공용 API를 유지 관리하고 메소드를 더 이상 사용하지 않아야합니다.
삭제하기 전에 몇 개월 / 년 / 버전 수에 대한 일반적인 규칙이 있습니까?
java.io.StringBufferInputStream
JDK 1.1 (1997?) 이후로 사용되지 않습니다. 이 질문에 대한 옳고 그른 대답은 없습니다. 이전 버전과의 호환성을 제공해야 할 필요에 따라 다릅니다.
공용 API를 유지 관리하고 메소드를 더 이상 사용하지 않아야합니다.
삭제하기 전에 몇 개월 / 년 / 버전 수에 대한 일반적인 규칙이 있습니까?
java.io.StringBufferInputStream
JDK 1.1 (1997?) 이후로 사용되지 않습니다. 이 질문에 대한 옳고 그른 대답은 없습니다. 이전 버전과의 호환성을 제공해야 할 필요에 따라 다릅니다.
답변:
최소한 사용하지 않는 메소드를 제거하기 전에 한 버전으로 유지해야합니다. 최대 시간이 없다고 생각하지만 실제로 제거하지 않으면 사용 중단이 약간 의미가 없습니다.
주요 버전 릴리스는 더 이상 사용되지 않는 메소드를 제거하기에 좋은시기입니다. 부 릴리스에는 일반적으로 주요 변경 사항이 포함되어서는 안됩니다. cHao가 의견에서 언급했듯이, 사용 중단이 반드시 삭제 될 것이라는 것을 의미하지는 않으므로 사용 중단 후 삭제하려는 경우 명시 적으로 메모하고 타임 라인에 대한 지침을 제공해야합니다.
이것은 사용자에게 어떤 종류의 안정성을 보장하고 사용자에게 얼마나 많은 고통을 주길 원하는지에 달려 있습니다.
이상적으로 API는 semver를 사용 하므로 주요 변경 사항으로 인해 주요 버전 번호가 증가합니다. 실제로이 작업은 거의 수행하지 않는 것이 좋습니다. API가 일부 패키지 관리자를 통해 설치된 경우 간단한 업그레이드로 인해 충돌이 발생하지 않도록 변경 후 새로운 패키지 이름을 만들 수 있습니다 (예 : myapi2 v2.123.4
vs myapi3 v3.2.1
). 패키지 관리자가 더 엄격한 버전 종속성 (예 :를 ~v2.120
포함하지 않는 종속성 사양)을 지원하는 경우 불필요 할 수 v3.*
있지만 서로 다른 패키지 이름은 호환되지 않는 버전을 아주 쉽게 사용할 수 있다는 장점이 있습니다. semver를 사용하는 경우에도 더 이상 사용되지 않는 기간이있을 수 있습니다.
Semver가 항상 적용 가능한 것은 아닙니다. 그런 다음 명확한 안정성 정책을 전달하는 것이 더 중요합니다. 예를 들면 다음과 같습니다.
이러한 정책은 정식 릴리스가있을 때 특히 효과적이므로 사용 중단 기간 (예 : 1 년)이 명확합니다.
더 이상 사용되지 않는 것으로 API의 일부를 표시하는 것 외에도 더 이상 사용되지 않음을 널리 알려야합니다. 예를 들면 다음과 같습니다.
정확한 지원 중단 기간을 선택하려면 먼저 사용자와의 지원 계약을 준수해야하는지 확인하십시오. 이러한 계약은 일정 기간 동안 호환성을 유지해야 할 수도 있습니다. 그렇지 않은 경우 다운 스트림 영향을 고려하십시오. 다운 스트림 사용자보다 속도가 느리게 변경되어 더 이상 사용되지 않는주기를 거칠 수 있습니다. 다운 스트림 사용자는 변경 사항에 적응하는 데 약간의 시간이 걸리므로 사용 중단 기간이 한 달보다 짧아서는 안됩니다.
Ideally, your API uses semver so that any breaking change causes the major version number to be incremented. In practice, it is desirable to do this almost never.
새로운 메이저 버전을 도입해서는 안된다고 말하면서 semver를 사용하여 변경 사항을 위반하는 것을 나타내는 요점은 무엇입니까?
이상적으로는 더 이상 사용되지 않는 방법을 사용하지 않을 때까지 기다리는 것이 좋습니다. 퍼블릭 API를 사용하는 것을 고려하면 추적하기 쉽지만 시간이 오래 걸릴 수 있습니다.
2015 년 Google은 Android OS의 stlport API와 비슷한 문제를 겪었습니다. 그들은 더 이상 사용하지 않아 제거하고 싶었지만 수많은 앱이 여전히 사용하고있었습니다. 그들은 영리한 해결책을 찾았습니다.
본질적으로 개발자를 위해 적절한 로그 메시지와 함께 API를 사용한 앱을 부팅하는 동안 8 초 sleep ()을 추가했습니다. 한 달 후, 그들은 그것을 16 초로 두 배로 늘 렸습니다. 또 한 달 뒤 API 인터페이스를 사용하는 사람이 없기 때문에 API 인터페이스를 안전하게 제거 할 수있었습니다.
이것은 매우 효과적인 방법입니다. 유일한 문제는 API가 매우 오래되어 더 이상 적극적으로 지원되지 않는 소비자를 적극적으로 사용한 경우입니다. 불행히도, 아마도 그러한 소비자를 스스로 고칠 수는 없지만 그 시점에서 메소드를 삭제하고 소비자를 파괴하는 것 이상을 실제로 할 수는 없습니다.
더 이상 사용되지 않는 메소드를 제공하는 최소 시간은 API를 사용하는 프로그램의 개발주기에 따라 다릅니다. 야구장으로서 1 년이면 충분합니다.
더 이상 사용되지 않는 메소드를 제거하기 전에 최대 시간에 대해서는 그런 것이 없다고 주장합니다. 얼마나 오래 기다리더라도 더 이상 사용되지 않는 메소드를 제거하면 항상 문제가 발생합니다. 더 이상 사용되지 않는 API를 사용하는 일부 프로그램은 적극적으로 유지 관리되지 않으며 호환성을 깨 뜨리면 해당 프로그램의 수명이 종료됩니다.
제거 에서 무언가 를 얻을 때 더 이상 사용되지 않는 메소드를 제거하는 것이 좋습니다 .
더 이상 사용되지 않는 메소드는 X 개월 / 년 동안 더 이상 사용되지 않거나 새로운 버전을 릴리스하기 때문에 정당한 이유없이 호환성을 임의로 손상시킵니다.
먼저 더 이상 사용되지 않거나 사용하지 않을 것인지 고려해야합니다.
보안, 성능, 잘못된 결과 등 어떤 방식 으로든 위험한 방법에는 더 이상 사용되지 않습니다. 당신은 그것들을 상대적으로 빠르게 제거하고 싶어합니다. 심각한 문제가 발생할 경우 다음 부 버전에서 더 이상 사용되지 않을 수 있습니다.
더 이상 사용되지 않는 정보, 예를 들어 적은 정보를 반환하거나 제대로 작동하지 않거나 많은 옵션 등을 포함하지 않는 등 쓸모없는 것입니다. 이것들은 무기한으로 매달려있을 수 있지만 최소한 다음 주요 버전에서는 존재해야합니다.
대답은 고객에게 제공하는 서비스 종류에 따라 다릅니다.
극단적으로, Windows 3.1에서 Win 3.1 시대의 실수는 20 년 동안 전파되어 왔으며, 이는 Microsoft가 이전 버전과의 호환성을 매우 강력하게 믿었 기 때문입니다.
스펙트럼의 다른 쪽 끝에서 많은 웹 응용 프로그램은 사용 중단 경고를 제공하지 않고도 기능을 제거합니다.
고객의 소프트웨어 비용은 업무 라인과 마찬가지로 종종 중요합니다. 연구 과학자들은 일반적으로 은행이나 FAA보다 진척의 행진의 일부로 더 이상 사용되지 않을 것을 기꺼이 받아들입니다.
내부 용 소프트웨어를 개발하는 회사에서 근무했습니다. 몇 년 동안 많은 그룹을 지원했습니다. 한 그룹은 "모든 기능을 제거하지 마십시오"라는 사고 방식을 가지고있었습니다. 그들은 5-10 년 전에 파일로 되돌아 가서 개발자들이 기능을 다시 넣을 수 없을 정도로 빠른 시간에 파일을 분석 할 수있는 능력이 필요했습니다. 나중에 찾을 수 있습니다. " 가운데에는 "그룹을 제거하기 전에 사용하는 경우 인쇄 된 경고와 함께 버전이 1 이상 사용되지 않아야합니다."라는 규칙이있는 그룹이 하나 있습니다. 이 그룹에는 필요한 기능을 다루는 테스트 스위트가있었습니다. 새로운 버전을 출시 할 때마다 테스트 스위트를 신속하게 실행하여 더 이상 사용되지 않는 제품이 문제를 일으키는 지 확인했습니다.
공용 API를 유지 관리하고 메소드를 더 이상 사용하지 않아야합니다.
왜 이렇게해야합니까? 새로운 빛나는 방법이 있기 때문에 이전 방법은 권장되지 않지만 여전히 잘 작동합니까? 아니면 근본적으로 변화했기 때문에 기존 방법이 실제로 필요합니까?
기존의 방법은 실제 문제가 발생하지 않는 경우, 그리고 수 곁에, 그것은 할 수있다뿐만 아니라. 파손되지 않았다면 고치지 마십시오. 정말로 제거해야합니까? 어쩌면 그것을 쓸모없는 것으로 표시하고 문서에 다른 방법이 더 효율적이거나 무엇이든 할 수있는 메모를 포함 시키십시오. 그러나 그것을 그대로 두는 것이 좋습니다.
이전 방법이 실제로 필요하다면 유지 관리 문제가 발생하거나 다른 변경으로 인해 더 이상 의미가 없기 때문에 사용법을 모니터링하고 사용 중단을 고객에게 명확하게 전달하십시오. 방법이 제거 된 후 명확한 날짜를 제공하십시오. (사실,이 날짜에 실제로 즉시 제거하지 마십시오. 실제로 제거하기 전에 아무도 사용하지 않을 때까지 기다리십시오. 실제로 문제가 발생하는 경우 더 빨리 진행해야하지만 최소한 사용이 중단 될 때까지 기다려야 할 수도 있습니다. 작은.)
이전 방법으로 보안 문제가 발생하는 경우 경고보다 빨리 제거해야 할 수도 있습니다. 경고없이 제거 할 수도 있지만이 변경 사항을 눈에 잘 띄는 곳에 기록하고 이전 방법을 사용하려는 클라이언트에게 합리적인 메시지를 반환해야합니다.
(두 번째 글 머리 기호는 다른 답변에서 잘 설명되어 있지만 첫 번째 글 머리 기호는 새로운 것 같습니다.)
공개 프로젝트의 경우 필요한 경우 에만 제거하십시오 .
불필요한 API 제거를 수행하면 비용이 많이 드는 이탈로 인해 계산할 수없는 방식으로 회사와 계약자에게 비용이 많이 듭니다.
회사와 독립 프로그래머가 프로젝트 사용을 중단하고 싶습니까? 중요하지 않은 시간에 충분한 시간을 허비하면 즉시 보트에 올라갑니다.
deprecation != eventual_removal
. API가 위험한 경우 제거합니다. 오래 된 경우 그대로두고 교체 내용을 기록하십시오.