[免責事項:この質問は主観的ですが、事実や反射によって裏付けられた回答を得ることを希望します]
誰もがロバストネスの原則について知っていると思いますが、通常はポステルの法則によって要約されます:
送信する内容には慎重になります。あなたが受け入れるものに寛大であること。
普及している通信プロトコルの設計では、これは理にかなっているかもしれません(簡単に拡張できるようにすることを目標としています)が、HTML / CSSへのアプリケーションは完全に失敗し、各ブラウザが独自のサイレント調整を実装していると常に考えていました検出/動作。複数のブラウザで一貫したレンダリングを取得することはほぼ不可能です。
ただし、TCPプロトコルのRFCでは、特に明記されていない限り、「サイレント障害」を許容できると考えています。これは、控えめに言っても興味深い動作です。
ソフトウェアトレード全体でこの原則が適用されている他の例があります。開発者に噛み付いたために、頭の一番上から定期的に表示されます。
- Javascriptセミコロン挿入
- C(サイレント)組み込み変換(切り捨てられなかった場合はそれほど悪くないでしょう...)
「スマート」動作の実装を支援するツールがあります。
- 名前に一致する表音アルゴリズム(Double Metaphone)
- 文字列距離アルゴリズム(レーベンシュタイン距離)
しかし、このアプローチは、技術に詳しくないユーザーを扱う場合やエラー回復のプロセスでユーザーを支援する場合には役立つかもしれませんが、ライブラリ/クラスインターフェースの設計に適用するといくつかの欠点があることがわかります。
- アルゴリズムが「正しい」と推測するかどうかはやや主観的であるため、最小驚きの原則に反する可能性があります。
- 実装がより難しくなり、バグを導入する機会が増えます(YAGNIの違反?)
- 「推測」ルーチンを変更すると古いプログラムが破損する可能性があり、リファクタリングの可能性をほぼ最初から除外するため、動作が変更されやすくなります。
そして、これが私を次の質問へと導いたものです。
インターフェイス(ライブラリ、クラス、メッセージ)を設計するとき、堅牢性の原則に傾いていますか?
私自身は非常に厳しい傾向があり、インターフェイスで広範な入力検証を使用しています。