2012-06-06 10 views
3

Мне нужно написать фреймворк FTP (AUTH TSL) в C#. Я пишу для написания фреймворков.
E.g. когда я докажу, что файл существует, а он нет, что мне делать?C# - Обработка исключений в фреймах

  • Выбрасывание исключения для программиста, использующего фреймворк?
  • Печать ExceptionMessage (Console.WriteLine()) без выброса Исключение?

Что такое профессионал в этом случае?

+4

Если вы использовали эту структуру, что бы вы хотели, чтобы это произошло? –

+0

Исключение из профессионала, заглотывает исключения ... –

+0

Возможно, выбрасывает исключение. –

ответ

4

Broad вопрос на самом деле, но есть некоторые подсказки, чтобы получить Вас на пути:

  1. Никогда не использовать Console.WriteLine() или любой вещи, как, что в рамках.
  2. Для таких методов, как Framework.FileExists, если файл не существует, просто верните значение false. Это истинная природа возвращаемого значения Boolean. Это более семантично.
  3. Для операций, которые сталкиваются с проблемами, бросают обычное или предопределенное исключение. Например, если вам нужен аргумент, и вы хотите удостовериться, что null не был передан вашему методу, просто проверьте аргумент в теле вашего метода и, если он равен нулю, введите ArgumentNullException.
+0

Кроме того, задокументируйте все исключения, которые могут быть выбраны методом. Потребитель инфраструктуры должен знать, что может пойти не так, чтобы правильно использовать структуру. – Michael

0

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

Я не буду работать с обратными кодами, потому что тогда пользователь должен их знать и интерпретировать. Могут быть ошибки.

1

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

public enum UploadResult 
{ 
    Success, 
    PasswordInvalid, 
    UserInvalid, 
    FileNotFound, 
    HostNotFound 
} 

пользователь вашей базы, то можно легко использовать его как это:

if (Ftp.Upload(User, Pass, Host, File) != UploadResult.Success) 
{ 
    MessageBox.Show("Sorry, something went terribly wrong."); 
} 

или проверить более конкретные причины и повторите попытку.

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

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