2016-07-18 3 views
2

は、私はかなりSemantic Versioning上にcluedたと思ったが、この1つの変更が予想されるバージョンの変更であるかについて、私はわからない作られていますJavaScript、メジャー、マイナー、パッチのネストされたオブジェクトのSemver?

元のコード:

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

新しいコード:

if (result.error) { 
    result.error.message = `${result.error.message} on ${self.tableName()}`; 
    return callback(result.error); 
} 
私はこの変更を考えている

patchminorとして、またはmajor変化として分類することができます。次の3つのシナリオがあります。

  1. patch:コールバックにはまだErrorオブジェクトがあります。 Errorオブジェクトはまだmessageプロパティを持ち、そのプロパティはまだStringです。
  2. minor:消費者がmessageプロパティの内容に頼って文字列の一部を探している可能性があります。この変更は文字列の末尾に追加するだけなので、追加するだけです。
  3. major:消費者がmessageプロパティの内容に依存することがあり、これは現在、別の文字列

である私が使っていたライブラリが邪魔にsemverに適合しなかったとき、私は一度本当に怒りました私は期待していました。私は他の人にそれをしたくありません。

私はこれが主観的/意見に基づく質問として見ることができると意識していますが、私は正しい答えを探しています。最も安全なオプションは明らかにmajorに行くことですが、それは過度のものかどうかを見ています。

+0

ユーザーがメッセージをどのように使用しているのかわからないため、大きな変化です。 –

+0

@AdrianLynch then *毎回の変更は大きな変更です。 – zerkms

+0

もちろんです。私が新しいメソッドを追加すると、それは大きな変化ではありません。メソッドに余分な引数を追加すると、それは大きな変更ではありません。私が以前とは違う何かを返すと、それは潜在的に壊滅的な変化です。 –

答えて

3

Patch

あなたはこれをしなかったときの変化に対応するために、あなたのテストのいずれかを変更する必要がありましたか?私はそうは思わない。あなたがこのメッセージフォーマットに頼らないなら、あなたの消費者がそれに頼っている可能性は何ですか?

+1

私は最後にパッチに出かけました。エラーメッセージは文書化されていないため、依拠してはいけません。 – Clarkie

0

私はそれがコンテキストに依存していると思います - 文字列操作なしでエラーメッセージに含まれている情報を取得する方法はありますか?もしそうなら、私はそれを変更することは大きな変化ではないと言いたいと思います。サポートされていない方法でAPIを使用しているコードをサポートするために後方に曲げてはいけません。

一方、その情報を取得する方法が他にない場合は、それがAPIの問題です。その場合は、新しいメッセージとメジャーバージョンの情報を取得するためのエラーオブジェクトのメソッド/プロパティをプッシュすることをお勧めします。これにより、人々のコードが壊れるのを避け、この問題を再度処理する必要はありません。エラーメッセージを変更する必要があります。

関連する問題