Penso che tu sia sulla strada giusta. Non ha senso gettare, catturare o documentare tutte le eccezioni potenzialmente lanciabili. Vi sono periodi in cui la rigidità del prodotto richiede un grado più elevato di utilizzo e documentazione delle eccezioni (ad esempio alcuni aspetti critici per la sicurezza di un sistema).
La strategia di essere più difensivi, usando concetti contrattuali per identificare le precondizioni (e le postcondizioni) su chiamanti soprattutto downstream (ad esempio qualsiasi cosa che assomigli a un membro pubblico o protetto) sarà spesso più efficace e più flessibile. Questo vale non solo per l'implementazione, ma per la documentazione. Se gli sviluppatori sanno cosa si aspetta, sono più propensi a seguire le regole e meno probabilità di confondersi o usare impropriamente il codice che hai scritto.
Alcune delle cose comuni che dovrebbero essere documentate includono il caso di parametri null. Spesso c'è una conseguenza per il loro uso che porta il risultato a qualcosa che normalmente non ci si aspetterebbe, ma è permesso e utilizzato per una serie di motivi, a volte per la flessibilità. Come consumatore di un membro che ha parametri che consentono valori null o altri valori speciali non razionali (come il tempo negativo o le quantità negative), mi aspetto di vederli identificati e spiegati.
Per i parametri non nulli, come consumatore di un membro pubblico o protetto, desidero sapere che null non è consentito. Voglio sapere qual è l'intervallo valido di valori nel contesto dato. Voglio conoscere le conseguenze dell'utilizzo di valori che sono al di fuori dell'intervallo normale, ma sono validi in un contesto di chiamata diverso (ad esempio il valore del tipo è generalmente valido per qualsiasi operazione, ma non qui - come un parametro booleano che non Non aspettarti il falso come valore valido.
Per quanto riguarda la piattaforma, o altrimenti le interfacce ben note, non penso che tu debba andare agli estremi nel documentarlo. Tuttavia, perché hai l'opportunità come sviluppatore di variare l'implementazione da qualsiasi guida di piattaforma, prendendo nota di quanto segue che la guida può avere un valore.
Specifici per IDisposable, spesso le implementazioni di questa interfaccia offrono un metodo alternativo che è preferito rispetto al processo di smaltimento esplicito. In questi casi, evidenzia il metodo preferito e nota che l'eliminazione esplicita non è preferita.