我有以下情形,我調用一個方法在我的數據訪問代碼從我的業務層:在DALtry catch塊位置
//Call the method from BL
SqlHandler sh = new SqlHandler();
var names = sh.GetNames();
方法例如:
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