Должен ли я поймать и отбросить исключение в этом случае? - PullRequest
4 голосов
/ 07 марта 2012

Я занимаюсь разработкой на уровне пользовательского интерфейса приложения, и после выполнения запроса на бизнес-уровне (или ниже) создается исключение. Исключение выглядит следующим образом

"System.Exception: данные не возвращаются в ..."

Что, очевидно, кто-то сделал просто:

if (...Rows.Count < 1)
    throw new Exception("No Data Returned");

Теперь в моей игровой площадке, я должен попытаться очистить это, пытаясь отбросить это как пользовательское исключение, которое я могу обработать определенно так:

try
{
    var myBusinessObject = MyBusinessMethod();
}
catch (Exception ex)
{
    if (ex.Message == "No Data Returned")
    {
        throw new NoDataException(ex.Message);
    }
    else
    {
        throw;
    }
}

Или есть более изящный способ справиться с этим.

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

Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 07 марта 2012

Это немного субъективно, но я бы предпочел жить с уродством обработки catch (Exception) в моем коде, чем беспокоиться о том, что произойдет, если кто-то изменит сообщение об ошибке на что-то отличное от No Data Returned.

2 голосов
/ 07 марта 2012

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

2 голосов
/ 07 марта 2012

Я действительно думаю, что это зависит от того, что означает это исключение в контексте вашего вызова. Например, если вы просите загрузить клиента по имени или идентификатору, исключение может быть просто сообщено вашему пользователю с помощью диалогового окна «клиент не найден». С другой стороны, если вы пытаетесь загрузить что-то критическое, то, по вашему мнению, должно быть там, и вы получаете это исключение, вы должны сделать что-то другое.

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

1 голос
/ 07 марта 2012

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

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

Как правило, ошибки, которые распространяются так далеко, подразделяются на две широкие категории:

  • Проблемы, которыепользователь должен знать, и / или которые существенно влияют на удобство использования.Как правило, это проблемы, при которых вы хотите, чтобы пользователь вводил данные, прежде чем решить, какое действие предпринять дальше (например, если имя пользователя не найдено при входе в систему или данные, которые вы пытаетесь отобразить, недоступны).Вместо того, чтобы выдавать новое исключение, чаще всего вы, скорее всего, сообщаете об ошибке в соответствии с вашей системой.

  • Проблемы, о которых пользователь не должен знать, которые не имеют отношения кправильное функционирование системы или которые имеют отношение только к системным администраторам и т. д. Эти проблемы обычно лучше решать с повторным выбросом исключения, поскольку обычно у вас будет слой верхнего уровня, который записывает исключения в месте для системных администраторов./ и т.д .. для входа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...