У меня есть следующий сценарий, когда я называю метод в моем коде доступа к данным из моего бизнес-слоя:попытка поймать блок место
//Call the method from BL
SqlHandler sh = new SqlHandler();
var names = sh.GetNames();
Метод например в DAL:
public IEnumerable<string> GetNames()
{
string conString = GetOpenConnection();
using (SqlConnection connection = new SqlConnection(conString))
{
connection.Open();
using(SqlCommand cmd = new SqlCommand("SELECT Name From Names"))
{
//...
}
}
}
Моя потребность - регистрировать любое исключение, которое происходит в моем DAL, и отображать сообщение пользователю с соответствующим сообщением. Насколько я могу видеть, у меня есть следующие варианты:
1) Окружите только вызов BL и журнал и вывести на экран сообщение оттуда:
try
{
SqlHandler sh = new SqlHandler();
var names = sh.GetNames();
}
catch (Exception ex)
{
ex.LogException();
MessageBox.Show(ex.Message);
}
2) объемного звучания обоих вызовов и расколоть протоколирования часть и уведомляющее часть на 2 секции:
try
{
SqlHandler sh = new SqlHandler();
var names = sh.GetNames();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
public IEnumerable<string> GetNames()
{
try
{
string conString = GetOpenConnection();
using (SqlConnection connection = new SqlConnection(conString))
{
connection.Open();
using (SqlCommand cmd = new SqlCommand("SELECT Name From Names"))
{
//...
}
}
}
catch (Exception ex)
{
ex.LogException();
//propagate the exception to the caller
throw;
}
}
3) я, конечно, можно было бы что-то пропустил, что я был бы рад узнать, о
что является предпочтительным APPRO в плане архитектуры приложения здесь? Есть ли разница между двумя верхними?
Это мнение основано .. –
Возникает вопрос: «Должен ли я помещать' try {} catch {} 'в DAL или BAL? – hdoghmen
Вариант 1 выглядит хорошо ... Вам может понадобиться что-то вроде http://stackoverflow.com/a/136092/747609 для обработки вещей по-другому. Однако это может стать беспорядочным. – IROEGBU