2009-09-20 14 views
6

mi chiedevo cosa lo standard eccezione è per la gestione degli errori nel Modello.Gestione degli errori nel modello (MVC)

Attualmente ho 'setError' e ai mezzi 'getError' che è in uso da parte di tutti i miei modelli.

Questo significa che sono solo interessati con se una chiamata a un metodo nel mio modello è vera o falsa. Se è falso, utilizzerei lo $this->model->getError() nel mio controller.

Inoltre che sto contemplando la creazione di un file separato che contiene tutti i miei errori. Un file per modello, voleva anche avere pensieri su questo.

risposta

3

Una soluzione più semplice sarebbe quella di utilizzare exceptions.

Quando si verifica un errore che sarebbe qualcosa di visualizzare a un utente, lanciare un particolare tipo di eccezione - forse di nome UserError. L'eccezione dovrebbe contenere il testo del messaggio di errore quando lo lanci. Questi tipi di errori sono caratteristiche che forniscono agli utenti informazioni utili (cioè hanno tentato di cancellare qualcosa che non esisteva - che può accadere quando hanno più browser aperto, ecc)

esempio:

throw new UserError("That object no longer exists."); 

Quando si verifica un errore che si desidera nascondere da parte dell'utente, a due un diverso tipo di eccezione, forse, di nome InternalError. Si vorrebbe registro questo e consentire al programma di continuare, quindi l'errore specifico è nascosto da parte dell'utente. Se impedisce che qualcosa accada, potresti voler lanciare un messaggio di errore generico. Questi sarebbero bug e si desidera risolverli il prima possibile.

es .:

throw new InternalError("Failed to connect to remote service"); 

Tutti i messaggi di errore possono essere memorizzati (hard-coded) nella sorgente in cui viene lanciata l'eccezione. Questa non è necessariamente una cattiva pratica di progettazione: se si utilizza uno strumento come gettext, è possibile tradurre facilmente tutti questi messaggi.

+0

Mi piace l'idea, l'unica avvertenza è che se ci sono più errori idealmente, voglio registrare l'errore e continuare l'esecuzione. Quindi perché stavo usando setError e getError. Controllo se il reso è vero, il che significa che tutte le azioni sono andate a buon fine e in caso contrario ottengo l'errore. Una mia azione è parzialmente riuscita e, di conseguenza, mi piacerebbe restituire false e usare getError per ottenere un messaggio che indica quale parte non ha avuto successo. Spero che abbia senso. – Andre

1

Sto usando log4j e log4cxx e la registrazione ad uno syslogd. Kiwi è un semplice syslogger Win32 che tiene traccia dei tuoi messaggi di log e li salva in un file. Log4j/Log4cxx hanno file di configurazione che è possibile utilizzare per impostare tutti i livelli di registro o le destinazioni dei messaggi di registro (è possibile accedere a più posti).

Ci vuole così poco sforzo per configurare e utilizzare, e funziona come un fascino.

Non ho provato io stesso log4php.

Le eccezioni sono buone quando non si desidera più che il programma continui a essere eseguito. Rilevare eccezioni ad alto livello in cui è possibile accettare il fallout delle esecuzioni fallite.