2013-09-05 5 views
3

Я понимаю понятие rescue- Мой вопрос заключается в следующем:Напишите Спасение в классе или нет?

Должен ли я написать свой begin rescue end код в моем классе или я должен написать его вне класса, когда я на самом деле создания объекта? Если у меня есть два файла - один с моим классом, один из которых я называю этим классом, в каком сценарии я вставляю скрипт для спасения? Возможно, это не имеет значения, или, может быть, я должен использовать и то, и другое. Просто интересно, какие передовые методы для этого ...

+0

Спросите себя: если вы выполняете 'спасение' внутри класса, каково будет действие по спасению? Ответ на этот вопрос может помочь вам определить, где будет более логичным местом для этого. Если вы хотите, возможно, различную обработку исключения в зависимости от приложения, вы хотите сделать это вне класса. – lurker

ответ

4

Общее правило с обработкой исключений заключается в том, чтобы поймать исключение на самом низком уровне абстракции, где можно сделать разумный выбор в том, как обрабатывать ошибку.

Если вы можете сделать интеллектуальный выбор внутри метода класса, включите в него свою логику спасения. Если у вас будет больше контекста на уровне вызывающего абонента, и вы хотите, чтобы каждый раз при вызове метода настраивалась логическая логика, тогда выставьте логику аварийного восстановления вне класса.

0

Лучшая практика заключается в том, чтобы поместить и rescue только вокруг определенной части кода, которую вы хотите изменить для поведения по умолчанию для повышения (например, выйти из вашего кода, что может привести к прекращению процесса, если не существует спасения более высокого уровня), и достичь цель, которую вы намеревались.

Что это такое, в зависимости от того, почему вам нужно до begin...rescue предложение в первую очередь.

Например, если ваши классы являются веб-службой и компонентом этой службы, а цель блока - представить все возникшие ошибки в виде отладки стека в браузере, то внешний веб-сервис слой, где вы должны спасать исключения. Вероятно, вы также должны охватывать большинство, если не всех, возможных типов повышенной ошибки.

В качестве альтернативы, если ваш «внутренний» класс предоставляет доступ к сторонней службе, а спасение позволяет повторить попытку неудачного подключения, блок может быть полностью внутри внутреннего класса. Кроме того, у вас будет только rescue конкретных сбоев, когда повторение будет иметь смысл.

 Смежные вопросы

  • Нет связанных вопросов^_^