Можете ли вы порекомендовать шаблон проектирования / подход к выявлению / переносу / восстановлению после системных ошибок, обработке исключений (Java, C ++, Perl, PHP)?
О некоторых ошибках нужно сообщать.
Некоторые ошибки могут быть обработаны внутри (повторной попыткой или несущественными (могут быть проигнорированы).
Как вы структурируете код, чтобы поймать их?
Но все ошибки должны быть зарегистрированы.
Какие лучшие практики есть?
И для того, чтобы имитировать их, чтобы иметь возможность полностью протестировать компоненты, на которые они влияют?
Общий конкретный вопрос, не относящийся к языку программирования, применим к нескольким современным языкам программирования, но приветствовал бы примеры иллюстраций шаблонов, подходов и философий на Java, C ++, PHP и Perl.
(Также спрашивается в stackoverflow: /programming/7432596/recommend-a-design-pattern-approach-to-exposing-tolerating-recovering-from-system, но я подумал, что это следует спросить и у программистов, потому что Я думаю, что вопросы и ответы программистов охватывают более широкие вопросы программного обеспечения / программирования, в то время как stackoverflow - больше о технической реализации (IMHO).
источник
Ответы:
Fail fast - отличный подход к проектированию, и, возможно, его можно считать шаблоном: http://en.wikipedia.org/wiki/Fail-fast
Я также нашел несколько принципов, которые будут полезны:
источник
Поработав с исключениями в Java и .NET и прочитав много статей о том, как / когда / почему отлавливать исключения, я, наконец, придумал следующие шаги, которые я выполняю в своей голове, когда вижу потенциальное исключение или Исключение я должен поймать (Java) ... даже если это никогда не происходит (вздох ...). И это, кажется, работает, по крайней мере для меня:
Я также должен добавить шаг 0 , где я намеренно выбрасываю то, что я называю «бизнес-исключением» (новое исключение, которое я создаю, расширяя класс «Исключение»), когда некоторая сложная обработка не может быть выполнена из-за ошибок данных, НО это Известно, что это происходит, поскольку они были определены как исключительные случаи во время анализа.
За исключением части регистрации, я полностью согласен с пунктами, написанными "mikera"; Я просто добавлю, что исключение должно быть зарегистрировано один раз только .
Кроме того, шаги, которые я перечислил, могут отличаться, если вы пишете API / Framework . Там, создание хорошо продуманных исключений обязательно, чтобы помочь разработчикам понять их ошибки.
Что касается тестирования исключений, используя фиктивные объекты, вы должны иметь возможность тестировать практически все, будь то исключения или нет, при условии, что ваши классы соблюдают лучшие практики «один класс - для одной вещи». Я также лично отмечаю, что наиболее важные, но скрытые методы помечены как «защищенные», а не как «частные», чтобы я мог проверить их без особых хлопот. Кроме того, тестирование исключений является простым, просто спровоцируйте исключение и «ожидайте», что возникнет исключение, перехватывая его. Если вы не получите исключение, значит, у вас ошибка в модульном тесте.
источник
Постройте свои объекты правильно, не беспокойтесь о внешних факторах. Если вы решите воспользоваться преимуществами исключений, то заставьте ваши объекты генерировать исключения, если они терпят неудачу что-то .
Как только все ваши объекты работают правильно, в вашем проекте должно быть довольно легко придумать чистую иерархию ответственности за обработку ошибок.
источник