В настоящее время я управляю библиотекой, которая широко используется, и у меня возник вопрос о семантическом версионировании . Я хочу провести рефакторинг одной довольно важной части библиотеки, которая реализована неправильно - и всегда была реализована неправильно. Но это будет означать изменения в публичном API, что является важным решением.
Изменение, которое я хочу сделать, вращается вокруг того, как используются итераторы. В настоящее время пользователи должны сделать это:
while ($element = $iterator->next()) {
// ...
}
Что неверно, по крайней мере, в родном интерфейсе итератора PHP . Я хочу заменить на это:
while ($iterator->valid()) {
$element = $iterator->current();
// ...
$iterator->next();
}
что аналогично:
foreach ($iterator as $element) {
// ...
}
Если вы посмотрите на руководство Тома по семантическому версионированию, он ясно заявляет, что любые изменения в публичном API (то есть те, которые не являются обратно совместимыми) должны оправдать основной выпуск. Таким образом, библиотека будет перепрыгивать с 1.7.3 до 2.0.0, что для меня слишком далеко. Мы говорим только об одной исправляемой функции.
У меня есть планы в конечном итоге выпустить 2.0.0, но я подумал, что это было, когда вы полностью переписали библиотеку и внесли многочисленные изменения в публичный API. Означает ли введение этого рефакторинга выпуск основной версии? Я действительно не могу видеть, как это происходит - я чувствую себя более комфортно, выпуская его как 1.8.0 или 1.7.4. У кого-нибудь есть совет?
next()
метод используется для извлечения текущего элемента и перемещения внутреннего указателя вперед. Что не так. next()
должен перемещать указатель и current()
используется для извлечения ...
next()
только того, что перемещает указатель, это действительно не нарушает совместимость