Удаление устаревшей функциональности из библиотеки - PullRequest
2 голосов
/ 10 января 2011

Скажем, у меня в API есть метод с именем foo.В следующей версии моего API я хотел бы заменить этот метод на bar.Как бы я поступил так?

Несколько вариантов:

1) Просто удалите foo.В примечаниях к выпуску укажите, что этот метод был заменен на bar.Это сломает клиентов, когда они попытаются собрать, используя мою новую библиотеку, но кого это волнует?Они просто должны исправить себя.

2) Отметить foo устарела и в примечаниях к выпуску указать, что bar должно быть предпочтительным.Записывать предупреждения при вызове устаревшего метода.Затем в следующей версии удалите foo в целом.Это дает клиентам небольшое окно предупреждения.

Что бы вы сделали?

Ответы [ 4 ]

5 голосов
/ 10 января 2011

Определенно делайте 2.

1 выше не только влияет на время компиляции, но также и на то, что конечный пользователь заменяет вашу библиотечную флягу, вызывая ошибки во время выполнения.

0 голосов
/ 10 января 2011

До 2, затем 1.

Во время вашего «маленького окна предупреждения» проясните своим клиентам, что bar - это вся ярость, и убедитесь, что все (или, на ваше усмотрение, большинство) больше не зависят от foo перед удалением мертвых. вес из вашей библиотеки. Таким образом, ваши клиенты могут пойти на неприятности по собственному усмотрению, вместо того, чтобы быть вынужденными из-за двоичного разрыва.

Конечно, как упоминал Дэвид, вам нужно будет использовать свое собственное суждение, основанное на размере вашей пользовательской базы. Если это небольшая библиотека, используемая только парой близких контактов, может оказаться более эффективным просто внести изменения, но хорошая форма , чтобы пометить ее как устаревшую.

0 голосов
/ 10 января 2011

Если клиентские программы находятся под моим контролем и если у меня есть хорошее тестовое покрытие для них, я переключаю клиентов на новую подпись и удаляю старую. В противном случае я осуждаю старую подпись.

0 голосов
/ 10 января 2011

Ваш стандартный выбор секунд - замена метода.

...