In un'applicazione di moduli di vincita MVP gestisco le eccezioni come segue in DAL.
Poiché la messaggistica utente non è una responsabilità di DAL, voglio spostarla nella mia classe Presentation.
Potresti mostrarmi un modo standard per farlo?
public bool InsertAccount(IBankAccount ba)
{
string selectStatement = @"IF NOT EXISTS (SELECT ac_no FROM BankAccount WHERE ac_no=@ac_no) BEGIN INSERT INTO BankAccount ...";
using (SqlConnection sqlConnection = new SqlConnection(db.ConnectionString))
{
using (SqlCommand sqlCommand = new SqlCommand(selectStatement, sqlConnection))
{
try
{
sqlConnection.Open();
sqlCommand.Parameters.Add("@ac_no", SqlDbType.Char).Value = ba.AccountNumber;
//
//
sqlCommand.ExecuteNonQuery();
return true;
}
catch (Exception e) { MessageBox.Show(("Error: " + e.Message)); }
if (sqlConnection.State == System.Data.ConnectionState.Open) sqlConnection.Close();
return false;
}
}
}
EDIT2:
Quindi, in base alle risposte, ho modificato il post e ora il mio codice di gestione delle eccezioni è simile a questo ...
DAL
public bool InsertAccount(IBankAccount ba)
{
try
{
sqlConnection.Open();
//
}
catch (SqlException)
{
throw new Exception("DataBase related Exception occurred");
}
catch (Exception)
{
throw new Exception("Exception occurred");
}
}
BankAccountPresenter
private void SaveBankAccount()
{
try
{
_DataService.InsertAccount(_model);
}
catch (Exception e) { MessagingService.ShowErrorMessage(e.Message); }
}
Perché ho rilevato eccezioni in DAL è che anche nel momento in cui non registro errori, potrei doverlo fare in futuro.
E anche in questo modo posso differenziare i massaggi di errore in DAL, sia esso relativo a sql o generale.
Ho usato il servizio di messaggistica nel mio presentatore quando mostravo i messaggi di errore.
Questo significato è pieno? Può essere semplificato?