Где правильное место для обработки исключений в моих приложениях C #?

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

Излишне говорить, что размер моего приложения (и количество кода) сократился вдвое. Но пока я проходил через это, я заметил кое-что еще в моем приложении, которое казалось повторяющимся и казалось, что его можно улучшить.

Сейчас большинство моих методов в моих вспомогательных классах либо создают HttpWebRequest , либо выполняют операции сохранения / удаления файлов. Сказав, что мне нужно обработать возможность того, что в конечном итоге вызов не будет завершен, или файл не может быть сохранен, потому что недостаточно места, или что-то еще. Проблема, с которой я сталкиваюсь, заключается в том, что мне приходится писать операторы try / catch каждый раз, когда я вызываю один из методов. Вдобавок к этому я должен повторно ввести сообщение об ошибке (или, в конце концов, сообщение о статусе. Я также хотел бы знать, когда это удастся).

Вот что-то вроде того, что мне нужно напечатать:

  try
  {
     ItemManager.SaveTextPost(myPostItem);
  }
  // Majority of the time there is more than one catch!
  catch
  {
     //^^^Not to mention that I have to handle multiple types of exceptions 
     //in order to log them correctly(more catches..ugh!)
     MessageBox.Show("There was an error saving the post.");
     //Perform logging here as well
  }

Из того, что я пришел к заключению, следующее:

  • Для меня это перебор, когда нужно писать это более 50 раз для моего приложения. {{1 }} Похоже, я должен включить это во вспомогательный класс и включить полный набор уловок.
  • Но как я мог узнать результат? Возможно, я думал вернуть строку , содержащую сообщение об ошибке / успехе.
  • На самом деле для этих типов методов не требуется метод, из которого вызывается вспомогательный метод, чтобы заключить его в блок try / catch.

Верен ли этот подход? Есть ли другой способ сделать это? Должен ли я вообще использовать try / catch в вызывающем методе? Поскольку это моя первая попытка в этом направлении, я действительно хотел бы услышать, что говорят другие, кто разбирался в этом сценарии.

5
задан Adam Rackis 22 November 2011 в 20:42
поделиться