Erstellen Sie zunächst eine NEUE API, die genau das tut, was Sie für Ihr NEUES API-Verhalten wünschen. Wenn diese neue API den gleichen Namen wie eine ältere API hat, füge ich den Namen _NEW an den neuen API-Namen an.
int DoSomethingInterestingAPI ();
wird:
int DoSomethingInterestingAPI_NEW (int takes_more_arguments); int DoSomethingInterestingAPI_OLD (); int DoSomethingInterestingAPI () {DoSomethingInterestingAPI_NEW (whatever_default_mimics_the_old_API); OK, zu diesem Zeitpunkt sind alle Ihre Regressionstests noch nicht bestanden. Verwenden Sie dazu den Namen DoSomethingInterestingAPI ().
NEXT, gehen Sie Ihren Code durch und ändern Sie alle Aufrufe von DoSomethingInterestingAPI () in die entsprechende Variante von DoSomethingInterestingAPI_NEW (). Dies beinhaltet das Aktualisieren / Umschreiben aller Teile Ihrer Regressionstests, die geändert werden müssen, um die neue API zu verwenden.
Als nächstes markieren Sie DoSomethingInterestingAPI_OLD () als [[veraltet ()]. Behalten Sie die veraltete API so lange bei, wie Sie möchten (bis Sie den gesamten Code, der möglicherweise davon abhängt, sicher aktualisiert haben).
Bei diesem Ansatz sind alle Fehler in Ihren Regressionstests einfach Fehler in diesem Regressionstest oder identifizieren Fehler in Ihrem Code - genau so, wie Sie es möchten. Dieser schrittweise Prozess der Überarbeitung einer API durch explizites Erstellen von _NEW- und _OLD-Versionen der API ermöglicht es Ihnen, Teile des neuen und alten Codes für eine Weile nebeneinander zu haben.
Hier ist ein gutes (hartes) Beispiel für diesen Ansatz in der Praxis. Ich hatte die Funktion BitSubstring () - wobei ich den Ansatz gewählt hatte, dass der dritte Parameter die Anzahl der Bits in der Teilzeichenfolge ist. Um mit anderen APIs und Mustern in C ++ konsistent zu sein, wollte ich wechseln, um als Argumente für die Funktion zu beginnen / zu enden.
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
Ich habe eine Funktion BitSubstring_NEW mit der neuen API erstellt und meinen gesamten Code so aktualisiert, dass er diese Funktion verwendet (ohne weitere Aufrufe an BitSubString). Aber ich habe die Implementierung für einige Releases (Monate) verlassen - und als veraltet markiert -, damit jeder zu BitSubString_NEW wechseln kann (und zu diesem Zeitpunkt das Argument von einer Zählung in einen Start- / End-Stil ändern kann).
DANN - als dieser Übergang abgeschlossen war, habe ich ein weiteres Commit ausgeführt, indem ich BitSubString () gelöscht und BitSubString_NEW-> BitSubString () umbenannt habe (und den Namen BitSubString_NEW verworfen habe).