の有用性はrequired
、多くの議論と炎上戦争の中心にあります。両側に大きなキャンプが存在しています。1つのキャンプは価値が存在することを保証するのが好きであり、その限界を受け入れて喜んででしたが、他のキャンプはrequired
受け入れることを安全に追加または削除できないため危険または役に立たないていました。
required
フィールドを慎重に使用する必要がある理由について詳しく説明します。すでにプロトを使用している場合、古いアプリケーションはそのフィールドを提供しておらず、アプリケーションは一般的に失敗をうまく処理できないため、必須フィールドを追加できません。すべての古いアプリケーションを最初にアップグレードすることを確認できますが、間違いを犯しやすく、プロトを任意のデータストア(memcachedなどの短期間のもの)に保存している場合は役に立ちません。必須フィールドを削除する場合も、同様の状況が当てはまります。
多くの必須フィールドは、「明らかに」必須となるまで...必須ではありませんでした。メソッドのid
フィールドがあるとしますGet
。それは明らかに必要です。ただし、後でid
intを文字列に、またはint32をint64 に変更する必要がある場合があります。新しいmuchBetterId
フィールドを追加する必要があり、指定id
する必要がある古いフィールドが残りますが、最終的には完全に無視されます。
これら2つの問題を組み合わせると、有益なrequired
フィールドの数が制限され、キャンプはそれがまだ価値があるかどうかについて議論します。の反対者required
たちは必ずしもその考えに反対したわけではなく、その現在の形に反対していた。のrequired
ようなより高度なものと一緒にチェックできるより表現力のある検証ライブラリを開発することを提案するname.length > 10
一方で、より優れた障害モデルを持つことを確認しました。
Proto3は全体的に単純さを優先するようで、required
削除はより単純です。しかし、おそらくより説得力のある、required
プリミティブのフィールドプレゼンスの削除やオーバーライドするデフォルト値の削除など、他の機能と組み合わせると、proto3の削除は理にかなっています。
私はprotobuf開発者ではないので、この件に関して権威はありませんが、それでも説明が役立つことを願っています。