DAL Gestione delle eccezioni in un'applicazione MVP

1

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?

    
posta CAD 13.06.2014 - 14:28
fonte

1 risposta

2

Invece di cogliere l'eccezione, perché non la lasci semplicemente scoppiare nel codice chiamante? Pertanto, il modello o il controller (a seconda di come si chiama InsertAccount) potrebbero rilevare l'eccezione (o, in effetti, qualsiasi eccezione) e visualizzarla all'utente in modo appropriato.

La mia regola generale è quella di rilevare un'eccezione solo quando posso fare qualcosa per risolverlo o non ho altra scelta che affrontarlo. Il tuo DAL non può risolverlo e ha una scelta: passalo a qualcuno a monte per gestirlo.

Per correggere la tua modifica, sconsiglio di creare una nuova eccezione generica e di inviarla. Cosa fa questo per gli utenti? A loro importa solo che qualcosa sia fallito, non che sia il database o un altro componente. Se si desidera eseguire la registrazione degli errori dall'interno del DAL (e penso che sia un motivo valido per rilevare le eccezioni), rilevarlo, registrarlo e quindi ripetere l'eccezione fino al chiamante. In questo modo ottieni il meglio da entrambi i mondi: hai gestito l'eccezione in modo importante per il tuo codice e il tuo relatore può capire in che modo presentare l'eccezione all'utente.

    
risposta data 13.06.2014 - 19:51
fonte

Leggi altre domande sui tag