Итак, я недавно пишу относительно сложное приложение, написанное на 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 раз для моего приложения.Похоже, я должен включить это в класс помощника и включить полный набор уловов.
- Но как я могу узнать результат?Возможно, я думал о возвращении строки, содержащей сообщение об ошибке / успехе.
- Действительно для этих типов методов не требуется метод, из которого вызывается вспомогательный метод, чтобы заключить его в попытку/ catch блок.
Правильный ли этот подход?Есть ли другой способ сделать это?Должен ли я использовать try / catch в вызывающем методе вообще?Так как это мой первый выстрел, мне бы очень хотелось услышать, что скажут другие, кто занимался этим сценарием.