Ich verwalte eine öffentliche API und muss eine Methode ablehnen.
Gibt es eine allgemeine Regel darüber, wie viele Monate / Jahre / Versionen vor dem Löschen eine Methode abgelehnt werden soll?
java
deprecation
deviDave
quelle
quelle
java.io.StringBufferInputStream
veraltet seit JDK 1.1 (1997?). Es gibt keine gute oder falsche Antwort auf diese Frage. Es hängt von Ihren Anforderungen ab, Abwärtskompatibilität bereitzustellen.Antworten:
Zumindest sollten Sie veraltete Methoden in einer Version belassen, bevor Sie sie entfernen, was beim Ausschreiben offensichtlich erscheint. Ich glaube nicht, dass es eine maximale Zeit gibt, aber wenn Sie sie nie wirklich entfernen, wird die Abwertung ein wenig sinnlos.
Hauptversionsversionen sind ein guter Zeitpunkt, um veraltete Methoden zu entfernen. Kleinere Releases sollten normalerweise keine wichtigen Änderungen enthalten. Wie cHao in den Kommentaren angemerkt hat, impliziert die Nichtbeachtung nicht unbedingt, dass eine eventuelle Entfernung erfolgt. Wenn Sie also vorhaben, Dinge nach der Nichtbeachtung zu entfernen, sollten Sie dies ausdrücklich beachten und einige Hinweise auf der Zeitachse geben.
quelle
Dies hängt ausschließlich davon ab, welche Stabilitätsgarantien Sie Ihren Benutzern gegeben haben und wie viel Schmerz Sie Ihren Benutzern zufügen möchten.
Idealerweise verwendet Ihre API Semver, sodass bei jeder Änderung die Hauptversionsnummer erhöht wird. In der Praxis ist es wünschenswert, dies so gut wie nie zu tun. Wenn Ihre API über einen Paketmanager installiert wird, möchten Sie möglicherweise nach einer Änderung einen neuen Paketnamen erstellen, damit bei einem einfachen Upgrade keine Konflikte auftreten (z . B.
myapi2 v2.123.4
vsmyapi3 v3.2.1
). Dies ist möglicherweise nicht erforderlich, wenn Ihr Paketmanager engere Versionsabhängigkeiten unterstützt (z. B. eine solche Abhängigkeitsspezifikation~v2.120
enthält keinev3.*
). Unterschiedliche Paketnamen haben jedoch den Vorteil, dass inkompatible Versionen sehr einfach nebeneinander verwendet werden können. Auch bei der Verwendung von Semver kann es sinnvoll sein, einen Verfallszeitraum festzulegen.Semver ist nicht immer anwendbar. Dann ist es wichtiger, eine klare Stabilitätspolitik zu kommunizieren. Beispielsweise:
Solche Richtlinien funktionieren besonders gut, wenn Sie regelmäßige Veröffentlichungen haben, sodass ein eindeutiger Verfallszeitraum vorliegt, z. B. ein Jahr.
Abgesehen davon, dass Sie Teile der API als veraltet markieren, sollten Sie die Veraltetheit weithin bekannt machen. Beispielsweise:
Prüfen Sie zunächst, ob Sie den genauen Verfallszeitraum festlegen müssen, für den Sie Support-Verträge mit Ihren Benutzern abschließen müssen. Solche Verträge erfordern möglicherweise, dass Sie die Kompatibilität für einen bestimmten Zeitraum aufrechterhalten. Wenn nicht, ziehen Sie nachgeschaltete Auswirkungen in Betracht. Versuchen Sie, weniger schnell als nachgeschaltete Benutzer zu wechseln, damit sie einen eigenen Verfallszyklus durchlaufen können. Nachgeschaltete Benutzer werden einige Zeit benötigen, um sich an Ihre Änderungen anzupassen. Sie sollten daher niemals einen kürzeren Verfallszeitraum als einen Monat festlegen.
quelle
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.
Wozu Semver verwenden, um aktuelle Änderungen anzuzeigen, wenn Sie dem folgen und sagen, dass Sie niemals eine neue Hauptversion einführen sollten?Idealerweise sollten Sie warten, bis niemand mehr die veraltete Methode verwendet. Angesichts der Tatsache, dass Sie eine öffentliche API verwenden, ist dies leicht nachzuverfolgen, aber Sie müssen möglicherweise sehr lange warten.
2015 hatte Google ein ähnliches Problem mit der stlport-API auf seinem Android-Betriebssystem. Sie hatten es abgelehnt und wollten es entfernen, aber Tonnen von Apps verwendeten es immer noch. Sie fanden eine clevere Lösung:
Im Wesentlichen fügten sie während des Startvorgangs einer App, die noch die API mit einer entsprechenden Protokollmeldung für die Entwickler verwendete, 8 Sekunden sleep () hinzu. Einen Monat später verdoppelten sie es auf 16 Sekunden. Dann, einen weiteren Monat später, konnten sie die API-Schnittstelle sicher entfernen, da niemand mehr damit beschäftigt war.
Dies kann ein sehr effektiver Weg sein, dies zu tun. Das einzige wirkliche Problem besteht darin, dass Ihre API sehr alt ist und aktiv Konsumenten verwendet hat, die nicht mehr aktiv unterstützt werden. Leider werden Sie solche Konsumenten wahrscheinlich nicht selbst reparieren können, aber zu diesem Zeitpunkt können Sie nicht mehr tun, als die Methode zu löschen und den Konsumenten zu brechen.
quelle
Die Mindestzeit für die Bereitstellung veralteter Methoden hängt von den Entwicklungszyklen der Programme ab, die Ihre API verwenden. Als Richtwert sollte ein Jahr ausreichen.
In Bezug auf die maximale Zeit, bevor Sie veraltete Methoden entfernen müssen, würde ich argumentieren, dass es so etwas nicht gibt. Unabhängig davon, wie lange Sie warten, führt das Entfernen einer veralteten Methode immer zu Problemen. Einige Programme, die Ihre veraltete API verwenden, werden nicht aktiv gewartet, und ein Abbruch der Kompatibilität bedeutet das Ende der Lebensdauer solcher Programme.
Ich schlage vor, dass Sie veraltete Methoden entfernen, wenn Sie durch das Entfernen etwas gewinnen :
Das Entfernen veralteter Methoden, nur weil sie für X Monate / Jahre veraltet waren oder weil Sie eine neue Version veröffentlichen, führt zu einer willkürlichen Beeinträchtigung der Kompatibilität ohne triftigen Grund.
quelle
Zuerst sollten Sie überlegen, ob Sie veraltet oder veraltet sein möchten.
Veraltet sollte für Methoden verwendet werden, die auf irgendeine Weise schädlich sind: Sicherheit, Leistung, falsche Ergebnisse. Sie wollen sie relativ schnell loswerden, nicht mehr als 2 Hauptversionen und bis zum 3. gegangen. Veraltete werden möglicherweise in der nächsten Nebenversion gelöscht, wenn es zu erheblichen Problemen kommt.
Veraltet ist für Dinge, die aus irgendeinem Grund weniger nützlich sind, zum Beispiel weniger Informationen zurückgeben oder nicht so gut funktionieren, nicht so viele Optionen enthalten und so weiter. Diese können auf unbestimmte Zeit herumhängen, sollten aber in der nächsten Hauptversion mindestens vorhanden sein.
quelle
Die Antwort hängt davon ab, welche Art von Service Sie Ihren Kunden anbieten.
Am Ende des Extrems gibt es in Windows.h Fehler aus der Win 3.1-Ära, die sich über zwei Jahrzehnte verbreiteten, weil Microsoft sehr stark an die Abwärtskompatibilität glaubte.
Am anderen Ende des Spektrums entfernen viele Web-Apps Funktionen, ohne dass eine Warnung vor Verfall ausgegeben wird.
Wie viel Ihre Kunden für Ihre Software bezahlen, ist häufig von Bedeutung, ebenso wie die Art ihrer Arbeit. Forscher sind in der Regel eher bereit, im Zuge des Fortschritts eine Abwertung zu akzeptieren als etwa Banker oder die FAA.
Ich arbeitete für eine Firma, die Software für den internen Gebrauch entwickelte. Ich habe im Laufe der Jahre viele Gruppen unterstützt. Eine Gruppe hatte eine Mentalität "Niemals irgendein Merkmal entfernen". Sie mussten vor fünf bis zehn Jahren in der Lage sein, auf Dateien zurückzugreifen und diese in zu kurzer Zeit zu analysieren, um die Entwickler dazu zu bringen, die Funktionen wieder einzubauen kann sie später finden. " In der Mitte hatten wir eine Gruppe, deren Regel lautete: "Features müssen für mindestens eine Version mit einer gedruckten Warnung veraltet sein, wenn sie vor dem Entfernen verwendet werden." Diese Gruppe verfügte über eine Testsuite, die die benötigten Funktionen abdeckte. Immer wenn wir eine neue Version herausbrachten, überprüften sie ihre Testsuite, um festzustellen, ob eine der Abwertungen Probleme bereitete.
quelle
Warum musst du das tun? Liegt es daran, dass es eine neue, glänzende Art gibt, Dinge zu tun, sodass die alte Methode jetzt nicht mehr empfohlen wird, aber immer noch funktioniert? Oder muss die alte Methode tatsächlich gehen, weil sich die Dinge grundlegend geändert haben?
Wenn die alte Methode keine tatsächlichen Probleme verursacht und durchhalten kann , kann dies auch der Fall sein. Wenn es nicht kaputt ist, reparieren Sie es nicht. Müssen Sie es wirklich entfernen? Markieren Sie es möglicherweise als veraltet und fügen Sie in die Dokumentation den Hinweis ein, dass eine andere Methode möglicherweise effizienter ist, oder was auch immer, aber es ist wahrscheinlich in Ordnung, sie an Ort und Stelle zu belassen.
Wenn die alte Methode wirklich zu Ende gehen muss, weil sie Ihnen Wartungsprobleme bereitet oder weil sie aufgrund anderer Änderungen keinen Sinn mehr ergibt, überwachen Sie ihre Verwendung und teilen Sie den Kunden die Ablehnung klar mit. Geben Sie ein klares Datum an, nach dem die Methode entfernt wird. (Entfernen Sie es an diesem Datum im Idealfall nicht sofort. Warten Sie, bis es noch von niemandem verwendet wird, bevor Sie es tatsächlich entfernen. Wenn es wirklich Probleme verursacht, muss es möglicherweise früher beendet werden. Warten Sie jedoch mindestens, bis die Verwendung a gelöscht wird wenig.)
Wenn die alte Methode Sicherheitsprobleme verursacht, müssen Sie möglicherweise schneller vorgehen und diese möglicherweise sogar ohne Vorwarnung entfernen. Sie sollten diese Änderung jedoch an einer sehr gut sichtbaren Stelle dokumentieren und sinnvolle Nachrichten an Clients zurückgeben, die versuchen, die alte Methode zu verwenden.
(Die zweiten beiden Punkte sind in anderen Antworten gut behandelt, aber ich denke, der erste ist neu.)
quelle
Entfernen Sie ein öffentliches Projekt nur dann, wenn dies erforderlich ist.
Wenn Sie unnötige API-Entfernungen durchführen, kosten Sie Unternehmen und Auftragnehmern so viel Geld, dass Sie aufgrund kostspieliger Abwanderung nicht einmal kalkulieren können.
Möchten Sie, dass Unternehmen und unabhängige Programmierer Ihr Projekt nicht mehr verwenden? Brechen Sie ihre Sachen oft genug, wenn Sie nicht unbedingt erforderlich sind und Sie in kürzester Zeit in diesem Boot sind.
deprecation != eventual_removal
. Wenn eine API gefährlich ist, entfernen Sie sie. Wenn es nur alt ist, lassen Sie es und dokumentieren Sie seinen Ersatz.quelle