Obecnie zarządzam biblioteką, która ma wiele zastosowań publicznych, i miałem pytanie dotyczące wersji semantycznej . Chcę refaktoryzować jedną dość ważną część biblioteki, która jest niepoprawnie zaimplementowana - i zawsze była niepoprawnie zaimplementowana. Ale zrobienie tego oznaczałoby zmiany w publicznym interfejsie API, co jest poważną decyzją.
Zmiana, którą chcę wprowadzić, dotyczy sposobu używania iteratorów. Obecnie użytkownicy muszą to zrobić:
while ($element = $iterator->next()) {
// ...
}
Co jest niepoprawne, przynajmniej w natywnym interfejsie Iteratora PHP . Chcę to zastąpić:
while ($iterator->valid()) {
$element = $iterator->current();
// ...
$iterator->next();
}
który jest analogiczny do:
foreach ($iterator as $element) {
// ...
}
Jeśli spojrzysz na przewodnik Toma dotyczący wersjonowania semantycznego, wyraźnie stwierdza, że wszelkie zmiany w publicznym interfejsie API (tj. Te, które nie są kompatybilne z poprzednimi wersjami), powinny uzasadniać ważną wersję. Tak więc biblioteka przeskakuje z wersji 1.7.3 do 2.0.0, co dla mnie jest krokiem za daleko. Mówimy tylko o naprawieniu jednej funkcji.
Mam plany, aby ostatecznie wydać 2.0.0, ale myślałem, że to wtedy, gdy całkowicie przepisałeś bibliotekę i zaimplementowałeś wiele publicznych zmian API. Czy wprowadzenie tego refaktoryzacji wymaga wydania ważnej wersji? Naprawdę nie widzę, jak to działa - czuję się bardziej komfortowo, wypuszczając go jako 1.8.0 lub 1.7.4. Czy ktoś ma jakieś rady?
next()
metoda służy do pobrania bieżącego elementu ORAZ przesunięcia wewnętrznego wskaźnika do przodu. Co jest złe. next()
powinien przesunąć wskaźnik i current()
służy do wyszukiwania ...
next()
tylko za to, że przesuwa wskaźnik, to naprawdę nie psuje kompatybilności