Обработка ошибок в многослойном приложении WinForm - PullRequest
1 голос
/ 21 декабря 2009

Если у меня есть многоуровневое приложение Winform, например, с презентацией, бизнес-уровнем и уровнем данных, и я сталкиваюсь с ошибкой в ​​бизнес-уровне или на уровне данных, для которых единственным логическим действием является регистрация ошибки и информирование пользователь, что произошла ошибка, где должна происходить регистрация?

Должен ли я поместить методы на бизнес-уровне и уровне данных в блоки try catch, например, так:

try
{
    DoSomethingThatMightGiveErrors();
}
catch(Exception ex)
{
    logger.log(ex.ToString());
    throw;
}

Или я должен просто позволить ошибкам пузыриться до уровня представления и обрабатывать ведение журнала и информирование пользователя там?

Ответы [ 4 ]

3 голосов
/ 21 декабря 2009

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

РЕДАКТИРОВАТЬ: я думаю, что это немного зависит от типа ведения журнала: если вы входите в центральную базу данных, которая не зависит от пользовательского интерфейса, поместите ведение журнала в слой бизнес-логики. Если ведение журнала относится к пользовательскому интерфейсу, например, для записи файла журнала в каталог приложения, поместите его в пользовательский интерфейс.

2 голосов
/ 21 декабря 2009

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

1 голос
/ 21 декабря 2009

Я бы предпочел разместить его на бизнес-уровне.

  1. Если вы когда-нибудь измените природу уровень представления (т.е. winforms to webforms) регистрация Код не нужно дублировать.
  2. Все ваши логи будут намного легче найти и поддерживать, так как вы всегда можете сканировать список методов бизнес-класса и проверять / настраивать их для регистрации. Если вы поместите запись в свой уровень презентации, вызовы регистрации будут разбросаны повсюду - один бизнес-класс может иметь вызовы регистрации, сделанные во многих различных классах презентации.
0 голосов
/ 21 декабря 2009

Это зависит от ваших требований, например, хотите ли вы исключить пользователей из приложения из-за ошибок, возникающих при переходе на уровень представления? Как часто эти ошибки возникают в непредвиденных ситуациях?

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

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

Надеюсь, это поможет вам, С наилучшими пожеланиями, Том.

...