2016-07-18 9 views
2

Ich dachte, ich ziemlich am Semantic Versioning clued, aber diese eine Änderung hat mich unsicher gemacht, was Änderung der erwartete Version ist:Semver auf verschachteltes Objekt in JavaScript, Major, Minor oder Patch?

Der ursprüngliche Code:

if (result.error) { 
    return callback(result.error); 
} 

Der neue Code:

if (result.error) { 
    result.error.message = `${result.error.message} on ${self.tableName()}`; 
    return callback(result.error); 
} 

Ich denke, diese Änderung könnte als patch, minor oder als major Änderung eingestuft werden. Die drei Szenarien:

  1. patch: der Rückruf noch ein Error Objekt empfängt. Das Error Objekt hat immer noch eine message Eigenschaft und diese Eigenschaft ist immer noch eine String.
  2. minor: Ein Konsument kann sich auf den Inhalt der message-Eigenschaft verlassen und nach einem Teil der Zeichenfolge suchen. Diese Änderung fügt nur mehr am Ende der Zeichenfolge hinzu, ist also nur additiv.
  3. major: ein Verbraucher kann auf dem Inhalt der message Eigenschaft angewiesen sein, und das ist jetzt eine andere Zeichenfolge

ich wirklich wütend einmal bekam, wenn eine Bibliothek war ich mit entsprachen nicht in der Art und Weise semver Ich habe erwartet. Ich möchte das nicht jemand anderem antun.

Ich bin mir bewusst, dass dies als eine subjektive/meinungsbasierte Frage angesehen werden könnte, aber ich suche nach der "richtigen" Antwort (mit Beweisen, wenn möglich). Die sicherste Option ist natürlich, gehen Sie für major, aber ich freue mich, ob das Overkill ist.

+0

Da Sie nicht wissen können, wie Ihre Benutzer die Nachricht verwenden, ist dies eine bahnbrechende Änderung. –

+0

@AdrianLynch dann * jede * Änderung ist eine brechende Veränderung. – zerkms

+0

Natürlich nicht. Wenn ich eine neue Methode hinzufüge, ist das keine brechende Änderung. Wenn ich einer Methode ein zusätzliches Argument hinzufüge, ist das keine brechende Änderung. Wenn ich etwas anderes als vorher zurückgebe, ist das eine potentiell zerstörerische Veränderung. –

Antwort

3

Patch

Haben Sie alle Ihre Tests ändern, wenn Sie dies getan haben, um die Änderung zu unterbringen? Ich vermute nicht. Wenn Sie sich nicht auf dieses Nachrichtenformat verlassen, welche Chancen haben Ihre Kunden dann?

+1

Ich ging am Ende zum Patch. Die Fehlermeldungen wurden nicht dokumentiert und sollten daher nicht verlässlich sein. – Clarkie

0

Ich denke, es hängt vom Kontext ab - gibt es eine Möglichkeit, die Informationen, die in der Fehlermeldung enthalten sind, ohne String-Manipulation zu bekommen? Wenn das der Fall ist, würde ich sagen, dass eine Änderung keine bahnbrechende Änderung ist - Sie sollten sich nicht rückwärts beugen müssen, um Code zu unterstützen, der die API auf nicht unterstützte Weise verwendet.

Auf der anderen Seite, wenn es keine andere Möglichkeit gibt, diese Informationen zu bekommen, dann ist das ein Problem mit Ihrer API. In diesem Fall würde ich empfehlen, eine Hauptversion mit der neuen Nachricht und den Methoden/Eigenschaften auf das Fehlerobjekt zu setzen, um diese Informationen zu erhalten - dies würde den Code der Leute brechen und sicherstellen, dass Sie dieses Problem nicht erneut behandeln müssen Sie möchten die Fehlermeldung ändern.

Verwandte Themen