Je pense que vous êtes sur la bonne voie. Ni lancer, attraper ni documenter toutes les exceptions potentiellement jetables n'a beaucoup de sens. Il y a des moments où la rigueur du produit nécessite un degré plus élevé d'emploi exceptionnel et de documentation (par exemple, certains aspects critiques de la sécurité d'un système).
La stratégie consistant à être plus défensif, à l'aide de concepts contractuels pour identifier les conditions préalables (et postconditions) sur les appelants en aval en particulier (par exemple, tout ce qui ressemble à un membre public ou protégé) sera souvent plus efficace et plus flexible. Cela s'applique non seulement à la mise en œuvre, mais à la documentation. Si les développeurs savent ce qui est attendu, ils sont plus susceptibles de suivre les règles et moins susceptibles d'être confus ou d'utiliser à mauvais escient le code que vous avez écrit.
Certaines des choses courantes qui devraient être documentées incluent le cas des paramètres nuls. Souvent, il y a une conséquence pour leur utilisation qui conduit le résultat à quelque chose qui ne serait normalement pas prévu, mais qui est autorisé et utilisé pour diverses raisons, parfois pour plus de flexibilité. En tant que consommateur d'un membre dont les paramètres autorisent des valeurs nulles ou autres valeurs non rationnelles spéciales (comme un temps négatif ou des quantités négatives), je m'attends à les voir identifiés et expliqués.
Pour les paramètres non nuls, en tant que consommateur d'un membre public ou protégé, je veux savoir que null n'est pas autorisé. Je veux savoir quelle est la plage de valeurs valide dans le contexte donné. Je veux connaître les conséquences de l'utilisation de valeurs qui sont en dehors de la plage normale, mais qui sont par ailleurs valides dans un contexte d'appel différent (par exemple, la valeur du type est généralement valide pour toute opération, mais pas ici - comme un paramètre booléen qui ne fonctionne pas ne vous attendez pas à false comme valeur valide.
En ce qui concerne la plate-forme ou les interfaces bien connues, je ne pense pas que vous deviez aller à l'extrême pour le documenter. Cependant, parce que vous avez la possibilité, en tant que développeur, de varier l'implémentation de n'importe quel guide de plateforme, notez comment il s'ensuit que ce guide peut être utile.
Spécifiques à IDisposable, les implémentations de cette interface offrent souvent une méthode alternative préférée au processus d'élimination explicite. Dans ces cas, mettez en surbrillance la méthode préférée et notez que l'élimination explicite n'est pas préférée.