Myślę, że jesteś na dobrej drodze. Ani rzucanie, łapanie, ani dokumentowanie wszystkich potencjalnie możliwych do rzucenia wyjątków nie ma większego sensu. Są chwile, w których rygorystyczność produktu wymaga wyższego stopnia wyjątkowego zatrudnienia i dokumentacji (np. Pewne aspekty krytyczne dla bezpieczeństwa systemów).
Strategia polegająca na bardziej defensywnym wykorzystaniu koncepcji kontraktowych do identyfikowania warunków wstępnych (i dodatkowych) na szczególnie dzwoniących w dalszej kolejności (np. Wszystko, co przypomina członka publicznego lub chronionego) będzie często bardziej skuteczna i elastyczna. Dotyczy to nie tylko wdrożenia, ale także dokumentacji. Jeśli programiści wiedzą, czego się spodziewają, są bardziej skłonni do przestrzegania reguł i rzadziej mogą się pomylić lub niewłaściwie wykorzystać napisany kod.
Niektóre z typowych rzeczy, które powinny być udokumentowane, obejmują przypadek parametrów zerowych. Często wiąże się to z konsekwencją ich zastosowania, która prowadzi do czegoś, czego normalnie nie można się spodziewać, ale jest dozwolona i używana z różnych powodów, czasem ze względu na elastyczność. Jako konsument członka, który ma parametry, które pozwalają na wartość zerową lub inne specjalne, nieracjonalne wartości (takie jak czas ujemny lub wartości ujemne), spodziewam się, że zostaną zidentyfikowane i wyjaśnione.
W przypadku parametrów innych niż null, jako konsument członka publicznego lub chronionego, chcę wiedzieć, że wartość null jest niedozwolona. Chcę wiedzieć, jaki jest prawidłowy zakres wartości w danym kontekście. Chcę poznać konsekwencje używania wartości, które są poza normalnym zakresem, ale poza tym są poprawne w innym kontekście wywoływania (np. Wartość typu jest ogólnie poprawna dla dowolnej operacji, ale nie tutaj - jak parametr boolowski, który nie nie należy oczekiwać wartości false jako prawidłowej wartości.
Jeśli chodzi o platformę lub inne dobrze znane interfejsy, nie sądzę, abyś musiał się starać w dokumentowaniu. Ponieważ jednak jako programista masz możliwość różnicowania implementacji w zależności od wskazówek platformy, należy pamiętać o tym, w jaki sposób wskazówki te mogą być wartościowe.
Specyficzne dla IDisposable, często implementacje tego interfejsu oferują alternatywną metodę, która jest lepsza niż proces jawnego usuwania. W takich przypadkach zaznacz preferowaną metodę i zauważ, że wyraźne usuwanie nie jest preferowane.