Ich verwalte derzeit eine Bibliothek, die viel öffentlich genutzt wird, und ich hatte eine Frage zur semantischen Versionierung . Ich möchte einen ziemlich wichtigen Teil der Bibliothek umgestalten, der falsch implementiert ist - und immer falsch implementiert wurde. Dies würde jedoch Änderungen an der öffentlichen API bedeuten, was eine wichtige Entscheidung ist.
Die Änderung, die ich vornehmen möchte, dreht sich darum, wie Iteratoren verwendet werden. Derzeit müssen Benutzer dies tun:
while ($element = $iterator->next()) {
// ...
}
Was zumindest in der nativen Iterator-Oberfläche von PHP nicht stimmt . Ich möchte Folgendes ersetzen:
while ($iterator->valid()) {
$element = $iterator->current();
// ...
$iterator->next();
}
das ist analog zu:
foreach ($iterator as $element) {
// ...
}
Wenn Sie sich Toms Handbuch zur semantischen Versionierung ansehen, stellt er klar, dass alle Änderungen an der öffentlichen API (dh diejenigen, die nicht abwärtskompatibel sind) eine Hauptversion rechtfertigen sollten. Die Bibliothek würde also von 1.7.3 auf 2.0.0 springen, was für mich ein Schritt zu weit ist. Wir sprechen nur über ein Feature, das repariert wird.
Ich habe vor, irgendwann 2.0.0 herauszubringen, aber ich dachte, dies war der Zeitpunkt, an dem Sie die Bibliothek komplett neu geschrieben und zahlreiche öffentliche API-Änderungen vorgenommen haben. Ist für die Einführung dieses Refactorings eine Hauptversion erforderlich? Ich kann wirklich nicht sehen, wie es funktioniert - ich fühle mich wohler, wenn ich es als 1.8.0 oder 1.7.4 veröffentliche. Hat jemand einen Rat?
next()
Methode verwendet, um das aktuelle Element abzurufen UND den internen Zeiger vorwärts zu bewegen. Was falsch ist. next()
sollte den Zeiger bewegen, und current()
wird verwendet, um abzurufen ...
next()
nur dem kümmern, der den Zeiger bewegt, das bricht wirklich nicht die Kompatibilität