Di seguito è riportato uno snippet di codice dall'applicazione MVP Win Forms e questa spiegazione sarebbe utile quando si risponde alle domande.
Il mio DAL non gestisce le eccezioni e sarà propagato fino al metodo chiamante nelle classi presenter in cui verrà gestita l'eccezione.
Sto utilizzando un singolo gestore chiamato ExecutAction(Action action)
, quindi sto rilevando eccezioni in un unico posto anziché ripetere codice in ogni metodo.
Al momento, non sto registrando errori. Basta avvisare l'utente di un'azione e provare a mantenere il sistema attivo se possibile.
Quando vengono mostrati messaggi agli utenti, i presentatori useranno una classe statica chiamata MessagingService
. (%codice%). In modo che io possa personalizzare tutte le scatole di massaggio in un unico posto.
private void Search()
{
ExecutAction(() =>
{
var info = _DataService.GetByACNo(_model.AccountNumber);
if (info != null)
{
_Model = info ;
this.SetViewPropertiesFromModel(_Model, _View);
}
else
{
MessageBox.Show ("Bank account not found");
}
});
}
private void ExecutAction(Action action)
{
try
{
action();
}
catch (NullReferenceException e) { MessagingService.ShowErrorMessage(e.Message); }
catch (System.Data.SqlTypes.SqlTypeException e) { MessagingService.ShowErrorMessage(e.Message); }
catch (System.Data.SqlClient.SqlException e) { MessagingService.ShowErrorMessage(e.Message); }
}
}
Dovrei includere un gestore di eccezioni generale a questo, per essere in grado di gestire eventuali eccezioni impreviste?
Inoltre potresti mostrarmi un modo migliore per gestire la visualizzazione dei messaggi rispetto all'utilizzo di una statica?
L'uso delle istruzioni lambda in ogni chiamata di metodo ( ShowErrorMessage()
) degrada la leggibilità del codice?
Quando mostri ai messaggi degli utenti come mostrare prima un messaggio personalizzato come "Verifica la connessione al server" ecc. e poi se l'utente vuole più informazioni (come StackTrace / dettagli tecnici) lui / lei potrebbe premere un pulsante come ExecutAction(() =>
che è nella finestra di dialogo MessageBox?