私はあなたが正しい軌道に乗っていると思います。スローされる可能性のあるすべての例外をスロー、キャッチ、または文書化することは、あまり意味がありません。製品の厳格性により、より高度な例外的な雇用と文書化が必要になる場合があります(システムの特定の安全上重要な側面など)。
契約の概念を使用して、特にダウンストリームの呼び出し元(たとえば、パブリックメンバーまたは保護されたメンバーに似ているもの)の前提条件(および事後条件)を識別する、より防御的な戦略は、多くの場合、より効果的でより柔軟になります。これは実装だけでなくドキュメントにも当てはまります。開発者が何が期待されているかを知っていれば、ルールに従う可能性が高くなり、作成したコードが混乱したり誤用されたりする可能性が低くなります。
文書化する必要がある一般的なものの一部には、nullパラメーターのケースが含まれます。多くの場合、それらを使用すると、通常は予期されない結果が得られますが、さまざまな理由で許可されて使用されるため、場合によっては柔軟性が高くなります。nullまたはその他の特別な非有理値(負の時間や負の数量など)を許可するパラメーターを持つメンバーのコンシューマーとして、それらが識別され、説明されることを期待しています。
null以外のパラメーターの場合、パブリックまたは保護されたメンバーのコンシューマーとして、nullは許可されないことを知りたいです。特定のコンテキストで有効な値の範囲を知りたい。通常の範囲外の値を使用した場合の結果を知りたいが、それ以外の場合は別の呼び出しコンテキストで有効です(たとえば、型の値は通常、どの操作でも有効ですが、ここでは無効です-ブール値パラメーターのように有効な値としてfalseを期待しないでください。
プラットフォーム、またはよく知られているインターフェースに関する限り、それを文書化するために極端に行く必要はないと思います。ただし、開発者として、プラットフォームのガイダンスと実装を変える機会があるので、ガイダンスが価値あるものであることにどのように従うかをメモしてください。
IDisposableに固有であり、多くの場合、このインターフェイスの実装は、明示的な破棄プロセスよりも優先される代替方法を提供します。これらの場合は、推奨される方法を強調し、明示的な廃棄は推奨されないことに注意してください。