Сначала создайте NEW API, который делает то, что вы хотите, чтобы ваше поведение NEW API было. Если случится так, что этот новый API будет иметь то же имя, что и OLDER API, тогда я добавлю имя _NEW к новому имени API.
int DoSomethingInterestingAPI ();
будет выглядеть так:
int DoSomethingInterestingAPI_NEW (int take_more_arguments); int DoSomethingInterestingAPI_OLD (); int DoSomethingInterestingAPI () {DoSomethingInterestingAPI_NEW (what_default_mimics_the_old_API); Хорошо - на этом этапе - все ваши регрессионные тесты пройдут - используя имя DoSomethingInterestingAPI ().
ДАЛЕЕ, просмотрите код и измените все вызовы DoSomethingInterestingAPI () на соответствующий вариант DoSomethingInterestingAPI_NEW (). Это включает в себя обновление / переписывание любых частей ваших регрессионных тестов, которые необходимо изменить, чтобы использовать новый API.
ДАЛЕЕ отметьте DoSomethingInterestingAPI_OLD () как [[deprecated ()]]. Держите устаревший API столько, сколько хотите (пока вы не обновите весь код, который может от него зависеть).
При таком подходе любые сбои в ваших регрессионных тестах просто являются ошибками в этом регрессионном тесте или идентифицируют ошибки в вашем коде - именно так, как вы хотели бы. Этот поэтапный процесс пересмотра API путем явного создания версий API _NEW и _OLD позволяет вам иметь биты нового и старого кода, сосуществующие некоторое время.
Вот хороший (сложный) пример такого подхода на практике. У меня была функция BitSubstring () - где я использовал подход, при котором третий параметр был COUNT битов в подстроке. Чтобы соответствовать другим API и шаблонам в C ++, я хотел переключиться на начало / конец в качестве аргументов функции.
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
Я создал функцию BitSubstring_NEW с новым API и обновил весь мой код, чтобы использовать его (оставив NO MORE CALLS для BitSubString). Но я оставил в реализации несколько выпусков (месяцев) - и отметил, что это устарело - чтобы каждый мог переключиться на BitSubString_NEW (и в это время изменить аргумент со счетчика на стиль начала / конца).
Затем - когда этот переход был завершен, я сделал еще один коммит, удалив BitSubString () и переименовав BitSubString_NEW-> BitSubString () (и объявил устаревшим имя BitSubString_NEW).