Каков рекомендуемый подход или наилучшая практика для обработки исключений в многоуровневых приложениях?
- Где вы можете разместить блоки
try/catch
? - Где следует внедрять ведение журнала?
- Существует ли предлагаемый шаблон для управления исключениями в n-уровневых приложениях?
Рассмотрим простой пример. Предположим, у вас есть пользовательский интерфейс, который вызывает бизнес-уровень, который вызывает слой данных:
//UI
protected void ButtonClick_GetObject(object sender, EventArgs e)
{
try {
MyObj obj = Business.GetObj();
}
catch (Exception ex) {
Logger.Log(ex); //should the logging happen here, or at source?
MessageBox.Show("An error occurred");
}
}
//Business
public MyObj GetObj()
{
//is this try/catch block redundant?
try {
MyObj obj = DAL.GetObj();
}
catch (Exception ex) {
throw new Exception("A DAL Exception occurred", ex);
}
}
//DAL
public MyObj GetObj()
{
//Or is this try/catch block redundant?
try {
//connect to database, get object
}
catch (SqlException ex) {
throw new Exception("A SQLException occurred", ex);
}
}
Какие критические замечания вы высказали бы в отношении обработки исключенных исключений?
спасибо