Подскажите, существуют ли какие-то общие стратегии обработки ошибок, применяемые при разработке крупных программных продуктов? Меня интересуют как методологические разработки данного вопроса, так и описание практического опыта. Скажем такие частные вопросы:
1. Использовать механизм исключений или анализ возвращаемого значения для обнаружения ошибок.
2. Централизованная обработка ошибок или обработка ошибок на месте. Под централизованной обработкой я имею в виду систему, где каждая операция проходит через некоторый, скажем, контроллер. Единственным назначением данного контроллера является анализ результата операции на предмет наличия ошибки (проверка возвращаемого значения, перехват исключения и т.п.) и публикация этого результата (лог, сообщение пользователю). Под децентрализованой системой я имею в виду систему, где ошибки обрабатываются и публикуются прямо на месте ее возникновения.
У каждого из этих вариантов мне видятся как свои достоинства так и свои недостатки. Полное отсутствие какой-либо систематизации также не рассматривается как большое преимущество. Хотелось бы выслушать ваши мнения по данному вопросу.